パラメータリストを関数に渡す方法

パラメータリストを関数に渡す方法

ループのパラメータを関数に渡したいですfunc。単純化のためにループを使用すると仮定します。

for x in {1..5}
do
    for y in {a..c}
    do
    echo $x$y
    done
done

どうすればいいかわからないので、ただ鳴った。 func 1a 1b 1c 2a 2b 2c 3a 3b 3c 4a 4b 4c 5a 5b 5c.

どうすればいいですか?

答え1

func {1..5}と同じですfunc 1 2 3 4 5

一般的に言葉のリストは~のためステートメントはコマンドの単語リストと同じであるため、コマンドを呼び出してループを置き換えて、使用したリストをコマンド引数に移動します。

また、複数の中かっこ拡張を一緒に使用できます。{1..5}{a..c}これにより、リストは(固有の単語として)生成され、表示する場合1a 1b 1c 2a 2b 2c 3a 3b 3c 4a 4b 4c 5a 5b 5cfunc {1..5}{a..c}機能します。


ループが最終コマンドのパラメータを生成するためにより複雑な操作を実行している場合は、配列を使用してそれらを収集できます(Bash / ksh / zshから)。generate_arg次のパラメータを生成するためにこれを実行する必要があるとしますfunc

args=()
for i in {1..5}; do
    args+=( "$(generate_arg "$i")" )
done
func "${args[@]}"

(配列を使用すると、スペースを含む値はそのまま残るため、値を文字列で連結するよりも優れています。)

関連情報