Arrays 使用包含空格的元素迭代数组

Arrays 使用包含空格的元素迭代数组,arrays,bash,Arrays,Bash,给定一个由两个元素组成的数组 array=("foo bar" baz) 使用带有“normal”语法的for..in循环产生三次迭代(数组元素被展开) 输出: 而带有“index”语法的for..in循环按预期工作(元素未展开) 输出: 是否有任何方法可以按照我的意愿使用第一个语法结构(即获得与使用第二个结构相同的结果) 引号起作用,因此您需要将代码更新为以下内容: for element in "${array[@]}" do echo $element done 注 而不是 fo

给定一个由两个元素组成的数组

array=("foo bar" baz)
使用带有“normal”语法的
for..in
循环产生三次迭代(数组元素被展开)

输出:

而带有“index”语法的
for..in
循环按预期工作(元素未展开)

输出:

是否有任何方法可以按照我的意愿使用第一个语法结构(即获得与使用第二个结构相同的结果)


引号起作用,因此您需要将代码更新为以下内容:

for element in "${array[@]}"
do
   echo $element
done

而不是

for element in ${array[@]}
试验
引号起作用,因此您需要将代码更新为以下内容:

for element in "${array[@]}"
do
   echo $element
done

而不是

for element in ${array[@]}
试验 您是否尝试过:

for element in "${array[@]}"; do 
  echo "${element}"
done
这将告诉我们:

IFS是分隔字段的字符列表;当外壳 将单词拆分为展开的一部分

做:

IFS=$''
for element in ${array[@]}; do 
  echo "${element}"
done
也会给出预期的结果。

您是否尝试过:

for element in "${array[@]}"; do 
  echo "${element}"
done
这将告诉我们:

IFS是分隔字段的字符列表;当外壳 将单词拆分为展开的一部分

做:

IFS=$''
for element in ${array[@]}; do 
  echo "${element}"
done

也会给出预期的结果。

只是好奇,
$”
是打字错误吗?(顺便说一句,对不起,我想fedorqui扣动扳机的速度快了一点;)@user2266481不,这不是打字错误。它重置IFS,这样在遇到空白时就不会执行分词了。好吧,我实际上想知道美元符号,我从来没有用它来设置IFS或给空字符串加前缀。如果没有它,一切似乎都会很顺利,你能在上面展开一点吗?@user2266481使用
$'
使bash解释
'
中的转义序列。所以你可以方便地说一些像
$'\t\n'
…谢谢,这很有帮助。只是好奇,
$'
是打字错误吗?(顺便说一句,对不起,我想fedorqui扣动扳机的速度快了一点;)@user2266481不,这不是打字错误。它重置IFS,这样在遇到空白时就不会执行分词了。好吧,我实际上想知道美元符号,我从来没有用它来设置IFS或给空字符串加前缀。如果没有它,一切似乎都会很顺利,你能在上面展开一点吗?@user2266481使用
$'
使bash解释
'
中的转义序列。因此,您可以方便地说一些类似于
$'\t\n'
…谢谢,这很有帮助。
$ array=("foo bar" baz)
$ for element in "${array[@]}"; do echo $element; done
foo bar
baz
for element in "${array[@]}"; do 
  echo "${element}"
done
IFS=$''
for element in ${array[@]}; do 
  echo "${element}"
done