Я не уверен, что происходит здесьПочему я не могу добавить массив?
#!/bin/bash
STRING_PREFIX="foo"
STRING_IDX="1,2,3,4,5"
declare -a STRING_ARRAY
main() {
assemble_strings
for i in "${STRING_ARRAY[@]}"; do
echo "TEST: $i"
done
}
assemble_strings() {
IFS=,
while IFS= read idx; do
STRING_ARRAY+=("${STRING_PREFIX}${idx}")
done < <(echo $STRING_IDX)
}
main
Я ожидаю, что массив из 5 строк, каждая предваряется «Foo». Вместо этого я получаю массив из 1 строки
TEST: foo1 2 3 4 5
Для получения бонусных очков, как я могу полностью избежать цикла? Я не могу понять, как создать массив из выражения в bash.
'echo $ STRING_IDX' испускает только одну строку, обрабатываемую одним вызовом' read'. Почему вы ожидаете, что это будет больше? –
BTW, используя имена всех шапок для ваших собственных переменных - плохая форма; эти имена зарезервированы по соглашению, чтобы по ошибке не переписывать переменные, зависящие от системы или оболочки. См. Четвертый абзац http://pubs.opengroup.org/onlinepubs/009695399/basedefs/xbd_chap08.html, имея в виду, что переменные оболочки и переменные среды совместно используют одно пространство имен. –
Кстати, если ваш контент был отделен символами новой строки, а не запятыми, я бы предложил использовать функцию bash 4 'readarray' (также известную по ее синониму,' mapfile'). –