Почему этот сценарий Bash (внизу) не выводит новую строку? Результатом является:

filesonetwothree

Вместо того

files
one
two
three

Вот сценарий:

files=()
files+="one"
files+="two"
files+="three"

printf "\nfiles"
for file in "${files[@]}"
do
    printf "$file\n"
done

Примечание: это на Mac работает Macos Sierra

0
AdvApp 8 Мар 2018 в 02:11

1 ответ

Лучший ответ

Следующее сделает вашу проблему очень понятно:

files=()
files+="one"
files+="two"
files+="three"
declare -p files

... испускается как вывод:

declare -a files='([0]="onetwothree")'

... Итак, вы добавили к первому элементу массива , не добавляя новые элементы на конец массива.


Чтобы правильно добавить до массива, вместо этого используйте следующее:

files=()
files+=("one")
files+=("two")
files+=("three")
declare -p files

... который излучает:

declare -a files='([0]="one" [1]="two" [2]="three")'

В любом случае, чтобы распечатать свой массив один-линейный-элемент, используйте строку формата с новой строкой и пропустите элементы массива в качестве последующих аргументов:

printf '%s\n' "${files[@]}"
4
Charles Duffy 8 Мар 2018 в 02:15