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を使用してこれを簡単に実行できます。名前を配列またはオブジェクトに入れてから、その配列/オブジェクトに入れます。しかし、バッシュはどうですか?

答え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引数がサポートされているため、単一のコマンドでこれをより効率的に実行できます。

関連情報