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 |
号
但在这种状态下,输出是:你好你好再见再见
我想得到:你好,你好再见
- @Anubhava,这不是一个重复,Op需要打印元素,而不是在数组上循环。
- OP已经显示了试图通过数组循环并打印的代码。
你刚刚遇到了空壳词分裂。
如果你引用(像你应该引用的那样),一切都可以:
1
| $ for line in"${arr[@]}"; do echo"$line"; done |
可以是(不与for一起阅读行):
1 2
| $ printf '%s
'"${arr[@]}" |
号输出:
"双引号"包含空格/元字符和每个扩展的每个文本:"$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...",其中c是IFS的第一个字符。未引用的$*和$@为undefined,不使用。你几乎总是想要"$@"。数组也是如此:"${array[@]}"。
- 你能解释一下为什么${arr[@]}不起作用吗?那么,arr[@]和arr[*]有什么区别?
- 检查我编辑的文章(最后一段)
- 太神了。谢谢您!!
- 你好,你能帮我一下吗?stackoverflow.com/questions/49097914/…
我想应该是:
1 2 3 4
| arr=("hello hello""bye bye")
for line in"${arr[@]}" ; do
echo $line
done |
。
巴什正在尽力做最好的解释。
- 你能解释一下为什么${arr[@]}不起作用吗?那么,arr[@]和arr[*]有什么区别?