为什么这个bash脚本(在底部)不输出换行符?结果是:
filesonetwothree
而不是
files
one
two
three
这是脚本:
files=()
files+="one"
files+="two"
files+="three"
printf "\nfiles"
for file in "${files[@]}"
do
printf "$file\n"
done
注意:这是在运行macOS Sierra的Mac上
答案 0 :(得分:4)
以下内容将使您的问题非常明确:
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[@]}"