2

parameter=valueが bash の内部変数であるとします。${#parameter}bash で試してみると、 5. しかし、たとえば、私が試みたとき、${##parameter}または${###parameter}それは常に0見返りに返されます. 他の場合のように、なぜ置換エラーであるとは言わないのですか?

4

2 に答える 2

3

短縮版

次のように表現できます${##parameter}

x=$#
${x#parameter}

そして${###parameter}次のように:

x=$#
${x##parameter}

$#(スクリプトに渡される引数の数 / 関数) に対してプレフィックスの削除を実行しています。


ロングバージョン

特別な意味がある場合parameterは、環境に固有のものである可能性があります。

$ echo \""${parameter}"\"
""

あるいは:

$ set -u
$ echo \""${parameter}"\"
bash: parameter: unbound variable

それでは、ドキュメントを簡単に見てみましょう:

${#parameter}

パラメータの展開された値の文字数が置換されます。

したがって、変数parameterが設定されていない場合:

$ echo ${#parameter}
0

またはでset -u

$ echo ${#parameter}
bash: parameter: unbound variable

追加の#変更された意味は、一致するプレフィックス パターンを削除します。using:${parameter#word}または${parameter##word}構文 on ${#}、つまり、スクリプト/関数に渡される引数の数。その動作を見て理解する良い方法は次のとおりです。

$ f() { echo -n "$# " ; echo ${##parameter}; }
$ f
0 0
$ f a b c
3 3

ご覧のとおり、最初の呼び出し${#}was 0and (プレフィックスを削除しようとして"parameter"も実際には何もしません) と 2 番目の呼び出し値${#}is3です。

#接頭辞の削除、との違い##は、一致するパターンが短い一致か最長一致かに関係なく除去されることです。

于 2020-02-09T15:56:13.433 に答える