次の変数割り当てを含むスクリプトがあります。
TEST_VARIABLE=${3#?}
機能は何ですか${3#?}
?
答え1
これをパラメータ拡張と呼びます。
$3
スクリプト/関数の3番目のパラメータである変数。#
変数の最短接頭辞が削除されます。?
探しているパターンです(この場合はすべての文字)。
3
したがって、デフォルトでは、パターンが見つかるまで指定された変数の最短接頭辞を削除します。
一般に、次のことを考慮することができます。
${variable_name[option][pattern]}
次のような他のオプションがあります。
##
最大のプレフィックスを削除します。%
最短のサフィックスを削除します。%%
最大のサフィックスを削除します。
たとえば、他のパターンと組み合わせてCSV行の最後のフィールドを取得できます。
> string="asdf,1234,aa,foo22"
> echo ${string##*,}
foo22
「コンマが続くすべての文字」検索パターンの最大プレフィックスを削除した方法をご覧ください。
答え2
> set -- 1 2 foo
> echo "$3"
foo
TEST_VARIABLE=${3#?}
> echo "$TEST_VARIABLE"
oo
最初の文字なしで3番目の位置引数の値を変数に割り当てますTEST_VARIABLE
(位置引数自体は変更されません)。
./myscript 1 2 foo
# or
myfunc 1 2 foo
# within each $3 is foo
インタラクティブシェルに位置パラメータを持つにはset
。