能否直接迭代循环头中声明的数组?Bash脚本技术疑问
Bash循环迭代元素的两种方式
你完全可以直接像示例里那样,在for循环的in后面写空格分隔的元素列表来迭代,不需要预先创建数组变量。
直接迭代元素列表
你的示例代码里的(1 2 3 4)其实是多余的括号(Bash里这里的括号不会创建数组,只是把元素作为普通单词列表传递),更简洁的写法是:
for ref in 1 2 3 4 do echo $ref done
这种写法对无空格的简单元素完全适用,循环会逐个处理每个元素。
使用数组变量的场景
如果你的元素包含空格,或者需要在脚本其他地方重复使用这组元素,建议先定义数组,再用[@]语法展开(必须加双引号,避免元素被错误拆分):
# 预先定义数组 refs=(1 "two three" 4) # 用数组展开迭代 for ref in "${refs[@]}" do echo "$ref" done
这种写法能正确保留带空格的元素,输出会是:
1 two three 4
总结
- 简单无空格元素:直接写列表就行,不用数组。
- 带空格元素或需复用:先定义数组,再用
"${数组名[@]}"展开迭代。
内容的提问来源于stack exchange,提问作者visu
相关产品推荐
相关产品推荐

