如何在bash中从数组中打印字符串?

How can I print strings from array in bash?

本问题已经有最佳答案,请猛点这里访问。

给定以下数组:

1
arr=("hello hello""bye bye")

如何将任何元素从arr打印到stdout?

我试着用下一种方法:

1
2
3
for line in ${arr[*]}; do
    echo ${line}
done

但在这种状态下,输出是:你好你好再见再见

我想得到:你好,你好再见


你刚刚遇到了空壳词分裂。

如果你引用(像你应该引用的那样),一切都可以:

1
$ for line in"${arr[@]}"; do echo"$line"; done

可以是(不与for一起阅读行):

1
2
$ printf '%s
'
"${arr[@]}"

号输出:

1
2
hello hello
bye bye

"双引号"包含空格/元字符和每个扩展的每个文本:"$var""$(command"$var")""${array[@]}""a & b"。使用'single quotes'表示代码或文字$'s: 'Costs $5 US'ssh host 'echo"$HOSTNAME"'。见网址:http://mywiki.wooledge.org/quoteshttp://mywiki.wooledge.org/arguments/参数http://wiki.bash-hacker.org/syntax/words

$@$*的区别是:"$@"作为它自己的论点扩展到每个位置参数:"$1""$2"。而"$*"扩展到单参数"$1c$2c...",其中cIFS的第一个字符。未引用的$*$@undefined,不使用。你几乎总是想要"$@"。数组也是如此:"${array[@]}"


我想应该是:

1
2
3
4
arr=("hello hello""bye bye")
for line in"${arr[@]}" ; do
    echo $line
done

巴什正在尽力做最好的解释。