parameter=value
が bash の内部変数であるとします。${#parameter}
bash で試してみると、 5
. しかし、たとえば、私が試みたとき、${##parameter}
または${###parameter}
それは常に0
見返りに返されます. 他の場合のように、なぜ置換エラーであるとは言わないのですか?
質問する
117 次
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 0
and (プレフィックスを削除しようとして"parameter"
も実際には何もしません) と 2 番目の呼び出し値${#}
is3
です。
#
接頭辞の削除、との違い##
は、一致するパターンが短い一致か最長一致かに関係なく除去されることです。
于 2020-02-09T15:56:13.433 に答える