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)

おすすめ記事