将命令的参数列表传递给每一行

时间:2015-12-19 23:20:08

标签: arrays bash

在bash脚本中: 我有这个参数列表(在这种情况下是目录):

Directories=(
/Dir1/
/Dir2/
/Dir3/
)
我希望此列表的每个(或行)都作为参数传递给命令。 像这样:

cd /Dir1/
cd /Dir2/
cd /Dir3/
(替换" cd"使用任何命令)

我试过这个:
cd ${Directories[@]}
但结果如下:
cd /Dir1/ /Dir2/ /Dir3/

如何让脚本每次都使用新行运行命令,直到它到达结尾?

2 个答案:

答案 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>,将该行作为参数传递; %是一个自由选择的占位符。