如何使用 bash 运行带有一组变量的相同命令?

如何使用 bash 运行带有一组变量的相同命令?

我想以更好的安排运行所有这些命令,我​​该怎么办?

# 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支持多个参数,因此您可以在单个命令中更有效地完成此操作。

相关内容