パラメータ拡張モードでは、「#」はどのような特別な意味を持ちますか?

パラメータ拡張モードでは、「#」はどのような特別な意味を持ちますか?

次の変数を定義するとします。

number=123#456

前に「123#」なしで印刷したいです。 (これはzshで10以外の数値を処理するときに発生します。)「パラメータ拡張」マニュアルの一部には次のように記載されています。

${name#pattern}

${name##pattern}

パターンが値の先頭に一致する場合名前を選択し、値を上書きします。名前一致する部分を削除し、そうでない場合は次のものと交換します。名前。最初の形式では最小の一致パターンが優先され、2番目の形式では最大の一致パターンが優先されます。

これが私にとって何を意味するのかは、私が言うことができるはずです。

print ${number#123#}

「123#」を削除すると、実際には「3#456」が出力されます。削除したい「#」をエスケープすると、目的の効果が得られることがわかりました。

print ${number#123\#}    # prints "456"

エスケープする前に「#」に特別な意味がありますか?

ベストアンサー1

#グローバルオペレータこれは、「前の文字または角かっこグループが0回以上発生する」ことを意味します。これは正規表現演算子を作成するzshメソッドです*。したがって、最も短い一致が選択されたときに一致が開始され()、123#最も長い一致が選択されたときに一致が開始されます()。12123#456${number#123#}123${number##123#}

オペレータは、#次の場合にのみアクティブになります。extended_globオプションが設定されました。このオプションはデフォルトでは設定されていませんが、通常環境設定で設定(非常に有用で基本的に面倒ではないため)で、完成機能が実行されると常に設定されます。

おすすめ記事