在bash脚本中: 我有这个参数列表(在这种情况下是目录):
Directories=(
/Dir1/
/Dir2/
/Dir3/
)
我希望此列表的每个项(或行)都作为参数传递给命令。
像这样:
cd /Dir1/
cd /Dir2/
cd /Dir3/
(替换" cd"使用任何命令)
我试过这个:
cd ${Directories[@]}
但结果如下:
cd /Dir1/ /Dir2/ /Dir3/
如何让脚本每次都使用新行运行命令,直到它到达结尾?
答案 0 :(得分:5)
也可以使用For循环
#!/bin/bash
Directories=( /dir1 /dir2 /dir3)
for dir in "${Directories[@]}"
do
cd "${dir}"
done
答案 1 :(得分:1)
更新:事实上,下面的解决方案 not 适合用于更改当前 shell的命令环境,例如cd
。 适用于调用外部实用程序的命令。
对于旨在改变当前shell环境的命令,请参阅Balaji Sukumaran's answer。
xargs
是工作的正确工具:
printf '%s\n' "${Directories[@]}" | xargs -I % <externalUtility> %
printf '%s\n' "${Directories[@]}"
在各自的行上打印每个数组元素。xargs -I % <externalUtility> %
为每个输入行调用外部命令<externalUtility>
,将该行作为单参数传递; %
是一个自由选择的占位符。