${3#?}は何をしますか?

${3#?}は何をしますか?

次の変数割り当てを含むスクリプトがあります。

TEST_VARIABLE=${3#?}

機能は何ですか${3#?}

答え1

これをパラメータ拡張と呼びます。

  1. $3スクリプト/関数の3番目のパラメータである変数。
  2. #変数の最短接頭辞が削除されます。
  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

関連情報