在Bash脚本中如何使用数组替代大量参数传递给命令?
在Bash脚本中如何使用数组替代大量参数传递给命令?
当然可以!这正是Bash数组设计的场景之一——帮你避免手动输入一堆重复或者繁琐的参数,还能保证参数传递的准确性。
首先得纠正你写的数组定义里的小问题:Bash里数组定义不要加逗号分隔元素,而且等号两边不能有空格,正确的写法应该是:
arr=("arg1" "arg2" "arg3")
接下来就是核心的传递方法:用"${arr[@]}"这个语法来展开数组。它会把数组里的每一个元素都作为独立的参数传递给命令,完全等价于你手动逐个输入参数的效果。比如你要调用的命令就可以写成:
/bin/meaningoflife "${arr[@]}"
举个更直观的例子,假设我们用echo命令模拟你的/bin/meaningoflife,数组里包含带空格的参数:
#!/bin/bash # 定义包含特殊情况的数组 my_args=("hello world" "foo" "bar with spaces" "42") # 传递数组参数 echo "${my_args[@]}"
执行这个脚本,你会看到每个元素都被当作独立的参数处理,带空格的元素也能完整保留,不会被拆成多个参数。
这里要注意别搞混"${arr[@]}"和"${arr[*]}":后者会把数组所有元素用空格(或者系统的IFS分隔符)拼接成单个参数传递,这通常不是你想要的效果,所以一定要用@而不是*。
另外还有个小细节:如果数组是空的,"${arr[@]}"会展开成空,不会给命令传递任何多余的参数,这比直接写$arr要靠谱($arr只会取数组的第一个元素)。
备注:内容来源于stack exchange,提问作者SpaghettiMan
相关产品推荐
相关产品推荐

