Bash globは複数のパラメータに拡張されます。

Bash globは複数のパラメータに拡張されます。

私は初めてbashスクリプトに触れました。複数のコンピュータにpingを送信するスクリプトがあります。 「I」は次のように書きました。

for var in "$@"
do
        ping -c 1 -W 2 "$var" > /dev/null
        echo $var = $?
done

私がしたいのは、同じ名前の複数のコンピュータをpingするための入力として単一のグローブを許可することです。

例:pingall machine[:01-06:]しかし、これを実装する方法がわかりません。

答え1

ワイルドカード別の名前ですファイル名の生成またはパス名拡張

これはシェルワイルドカードを一致するファイルのリストに変換するプロセスです。それは単に使用することができます既存の文書。

ここでは代わりに中かっこ拡張を使用できます。

pingall machine{01..06}

シェルは、その名前のファイルが現在のディレクトリにあるかどうかにかかわらず(ワイルドカードではない)、単一の引数に拡張されますmachine01machine02machine06

この構文はzsh最新バージョンの 。bashyash -o braceexpand

を使用するには、ksh93次のものを使用できます。

pingall machine{1..6%02d}

この特別なケースでは、次のものを使用することもできます。

pingall machine0{1..6}

GNUseqコマンドを使用すると、次のこともできます(デフォルトはと仮定します$IFS)。

pingall $(seq -f machine%02.0f 6)

答え2

パターンは、ファイル名と一致する場合にのみ拡張されます。代わりに中かっこ拡張を使用できますか?スクリプトの実行

pingall machine0{1..6}

これは次のように拡張されます。

pingall machine01 machine02 machine03 machine04 machine05 machine06

関連情報