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