我想以更好的安排运行所有这些命令,我该怎么办?
# 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
支持多个参数,因此您可以在单个命令中更有效地完成此操作。