2

bash スクリプトの入力パラメータを取得しようとしています。testbash.sh 4 1 2 4 5 Science ap * これらの引数を配列として取得したいのですが、$@ を使用してすべてを配列に取得します。最初の引数に基づいて、残りをサブセット化する必要があります。ここでは最初の数値が 4 であるため、2 番目の引数から 5 番目の引数までを [1 2 4 5] のような配列として保存し、残りの引数を別の配列に保存する必要があります。

私はこれを試しました

array=( $@ ) len=${#array[@]} args=${array[@]:0:$len-${array[1]}} echo $args

最初の部分を取得するためにこれを試みましたが、この「testbash.sh 4 1 2 4 5 Science ap *」を実行すると、式にエラー構文エラーが発生します (エラートークンは「:-4」です)。

4

1 に答える 1

4

1 つの方法を次に示します。

FIRST_SET=("${@:2:$1}")
REST=("${@:$(($1+2))}")

これは、中間配列を使用するのではなく、引数から直接機能します。多かれ少なかれ同じ方法で中間配列を使用するのは簡単ですが、配列のインデックス付けは 0 から始まり、パラメーターのインデックス付けは事実上 1 から始まることに注意してください (パラメーター 0 はコマンド名であるため)。

引用符が重要であることに注意してください。引用符がないと、コマンド ライン引数がグロブ展開と単語分割に余計な時間がかかります。実際には、コマンド ライン引数を引用する機能が失われます。

于 2013-06-20T17:03:59.747 に答える