У меня есть два набора аргументов: a = "5 7 1"
и b = "dogs cats horse"
Они должны быть в парах: 5
совпадений dogs
, 7
совпадений cats
и 1
совпадений horse
Они также должны сделать это в одной строке:
I have 5 whatever dogs whatever whatever
I have 7 whatever cats whatever whatever
I have 1 whatever horse whatever whatever
Проблема в том, что $a
и $b
могут иметь сотни аргументов, поэтому писать много строк, напримервышеприведенные варианты на самом деле не подходят.
Я нашел что-то вроде следующего, которое выполняет работу:
a = "5 7 1"
b = "dogs cats horse"
set -- $a
for i in $b; do
echo "I have $i whatever $1 whatever whatever"
shift 1
done
, но мне интересно, есть ли другие альтернативы.
Обычно, когда у нас всего 3 пары, в скрипте легко узнать, какие значения из $a
соответствуют каким значениям $b
. Теперь представьте 200 значений в обоих наборах, и вам нужно изменить значения $b
, где значения $a
равны 50
и 157
. Конечно, это всего лишь пример - любые значения могут меняться в обоих наборах со временем. Так есть ли лучший способ сопоставить значения что-то вроде 5:dogs
, 7:cats
и 1:cats
? Таким образом, если количество собак изменится на 4, я легко найду, что изменить.