これらすべてのコマンドをより良い配列で実行したいと思います。どうすればいいですか?
# 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
引数がサポートされているため、単一のコマンドでこれをより効率的に実行できます。