2

スクリプトに渡される引数の数に関係なく、最後から 2 番目の引数が常にコード内の特定の変数を表すようにしたいと考えています。

プログラムを実行すると、次のように入力します。

sh myprogram.sh -a arg_a -b arg_b special specific

test=("${3}")
echo $test

結果は「特別」と表示されます。したがって、これを試す場合は同じアイデアを使用します(引数の数がわからないため):

secondToLastArg=$(($#-1))
echo $secondToLastArg

結果は「3」と表示されます。最後から 2 番目の引数を動的に割り当てるにはどうすればよいですか?

4

2 に答える 2

3

必要な数を取得するには少し計算が必要です ( $(($#-1)))。その後、間接参照 ( ${!n}) を使用して実際の引数を取得します。

$ set -- a b c 
$ echo $@
a b c
$ n=$(($#-1))
$ echo $n
2
$ echo ${!n}
b
$ 

インダイレクション ( ) は、使用する変数の名前として の${!n}値を使用するように bash に指示します (この場合は )。n$2

于 2013-05-13T17:16:56.847 に答える
2

$@ を配列および配列チョッピング メソッドとして使用できます。

echo ${@:$(($#-1)):1}

つまり、1から始まる要素を使用し$(($#-1))ます...

一部の古いバージョンのシェルが構文をサポートせず、構文${array:start:length}のみをサポートする${array:start}場合は、以下のハックを使用します。

echo ${@:$(($#-1))} | { read x y ; echo $x; } # OR
read x unused <<< `echo ${@:$(($#-1))}`
于 2013-05-13T17:38:50.703 に答える