У меня есть сценарий удара, который инициируется с аргументами, у меня есть функция для обработки аргументов. Я помещаю аргументы в массив args=("$@")
. и у меня есть функция, которая может проверить, содержит ли аргумент действительно определенные элементы.
containsElement () {
local e
for e in "${@:2}"; do [[ "$e" == "$1" ]] && { ipos="$i"; return 0; }
done
return 1
}
Я хотел улучшить свою функцию со способностью это; После нахождения аргумента проверьте следующие аргументы и посмотрите, содержат ли они числа до следующего не, числовой элемент в массиве найден, поместите их в массив, выбирают [1], выбирают [2]... Это лучше объяснено в примере;
sh script.sh plt 2 3 g40 All 32
затем я хочу функцию, дают мне
if containsElement "plt" "${args[@]}" ; then
containsElement "plt" "${args[@]}"
echo ${opt[@]}
fi
дайте мне
2 3 g40
Число является опциями для каждого аргумента. Я могу записать что-то, чтобы сделать это, но это обращается к ужасному коду, я хотел изучить хороший способ сделать это.
Я сделаю это с regexes, например:
echo plt 2 3 g40 All 32|perl -ne's/(\w+) ([\d ]+)(\w+)/print "$1$2$3\n"/egx;'
plt 2 3 g40
All 32
Не уверенный, если это - то, что Вы ищете? Можно опустить печатать первую строку для каждой группы параметра, с:
echo plt 2 3 g40 All 32|perl -ne's/(\w+) ([\d ]+)(\w+)/print "$2$3\n"/egx;'