bash-операции над массивами с использованием bc - PullRequest
0 голосов
/ 25 февраля 2019

при чтении справочной страницы bc, кажется, что bc может принимать простые переменные, но также и массивы в качестве входных данных.

Однако, если я пытаюсь добавить два массива, я получаю только один элемент какoutput

a=(1 2 3)
b=(10 11 12)
c=`echo "$a + $b" | bc`

Тогда c содержит только 11. Если есть способ заставить bc работать со всеми элементами в массивах для получения (11 13 15) в качестве выхода?Или мне нужно сделать цикл?

1 Ответ

0 голосов
/ 25 февраля 2019

bc не может иметь собственный доступ к массивам bash, но вы можете сгенерировать из ваших двух массивов поток операций сложения и прочитать их результаты обратно в третий массив (таким образом, нужно всего лишь один раз вызвать bc вместо запускаотдельная копия bc для каждой записи в цикле):

a=(1 2 3)
b=(10 11 12)

readarray -t c < <(for idx in "${!a[@]}"; do
  echo "${a[$idx]} + ${b[$idx]}"
done | bc)
declare -p c              # print output as an array definition
printf '%s\n' "${c[@]}"   # print output one entry per line

См., что это работает на https://ideone.com/YuPhQP,, должным образом излучая как вывод:

declare -a c=([0]="11" [1]="13" [2]="15")
11
13
15
...