![如何使用 bash 运行带有一组变量的相同命令?](https://linux22.com/image/47329/%E5%A6%82%E4%BD%95%E4%BD%BF%E7%94%A8%20bash%20%E8%BF%90%E8%A1%8C%E5%B8%A6%E6%9C%89%E4%B8%80%E7%BB%84%E5%8F%98%E9%87%8F%E7%9A%84%E7%9B%B8%E5%90%8C%E5%91%BD%E4%BB%A4%EF%BC%9F.png)
我想以更好的安排运行所有这些命令,我该怎么办?
# bash script of "copyall.sh"
scp /local/michael.txt [email protected]:~/
scp /local/jason.txt [email protected]:~/
scp /local/jerry.txt [email protected]:~/
scp /local/wong.txt [email protected]:~/
scp /local/lee.txt [email protected]:~/
scp /local/mark.txt [email protected]:~/
例如,通过 JavaScript 可以很容易地做到这一点。我只需要将名称放入数组或对象中,然后将其放入该数组/对象中。但是 bash 又如何呢?
答案1
这里不需要任何变量。
scp /local/michael.txt /local/jason.txt /local/jerry.txt \
/local/wong.txt /local/lee.txt /local/mark.txt \
[email protected]:~/
您还可以使用大括号扩展:
scp /local/{michael,jason,jerry,wong,lee,mark}.txt [email protected]:~/
答案2
您也可以使用for
构造bash
:
for name in michael jason jerry wong lee mark; do
scp "/local/${name}.txt" [email protected]:~/
done
这会对scp
每个名称运行一次该行,并替换${name}
为当前名称。
bash
也支持显式数组,所以你可以这样做:
names=( michael jason jerry wong lee mark )
for name in "${names[@]}"; do
scp "/local/${name}.txt" [email protected]:~/
done
正如 @choroba 的答案中指出的,scp
支持多个参数,因此您可以在单个命令中更有效地完成此操作。