【问题标题】:How can I print strings from array in bash? [duplicate]如何在 bash 中从数组中打印字符串? [复制]
【发布时间】:2018-08-07 15:19:22
【问题描述】:

给定以下数组:

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

如何将arr 中的任何元素打印到标准输出?

我尝试了下一个方法:

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

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

我想得到:
你好你好
再见

【问题讨论】:

  • @anubhava,这不是重复的,OP 需要打印元素,而不是循环遍历数组
  • OP 显示了试图循环遍历数组并打印的代码。

标签: bash


【解决方案1】:

你刚认识shell word splitting


如果您引用(如您所愿),一切正常:

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

可以只是(don't read lines with for):

$ printf '%s\n' "${arr[@]}"

输出:

hello hello
bye bye

“双引号”每个包含空格/元字符和每个扩展的文字:"$var""$(command "$var")""${array[@]}""a & b"。将'single quotes' 用于代码或文字$'s: 'Costs $5 US'ssh host 'echo "$HOSTNAME"'。见
http://mywiki.wooledge.org/Quotes
http://mywiki.wooledge.org/Arguments
http://wiki.bash-hackers.org/syntax/words


$@$* 之间的区别:"$@"(引用)扩展为每个位置参数作为其自己的参数:"$1""$2" ... 而 "$*" 扩展为单个参数 @987654343 @ 其中cIFS 的第一个字符。未引用的$*$@undefined请勿使用。你几乎总是想要"$@"数组也是如此"${array[@]}"

【讨论】:

  • 你能解释一下为什么${arr[@]} 不起作用吗? arr[@]arr[*] 有什么区别?
  • 检查我编辑的帖子(最后一段)
  • 太棒了。谢谢!!
  • 你好,你能帮我一下吗? stackoverflow.com/questions/49097914/…
【解决方案2】:

我认为应该是:

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

bash 正在尽力解释。

【讨论】:

  • 你能解释一下为什么${arr[@]} 不起作用吗? arr[@]arr[*] 有什么区别?
猜你喜欢
  • 2019-06-29
  • 2021-09-21
  • 2021-07-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多