*$'\n'* とはどういう意味ですか?

*$'\n'* とはどういう意味ですか?

次のzshウィジェットがあります

down-line-or-select() {
    if [[ $RBUFFER == *$'\n'* ]]; then
    zle down-line
    else
    zle menu-select -w
    fi
}

zle -N down-line-or-select
bindkey $terminfo[kcud1] down-line-or-select

ここでは意味を理解していません*$'\n'*。誰かがこれを説明できますか?

ベストアンサー1

このテストは、[[ $variable == pattern ]]変数の値が与えられたシェルパターンと一致するかどうかをテストします。

この場合のパターンはです*$'\n'*。パターンの一部は$'\n'リテラル改行を表します。 $'...'一般的に言えば、「ANSI C文字列」です。これは、内部バックスラッシュエスケープシーケンスが$'...'C言語標準(\n改行文字、\tタブなど)で説明されているように解釈されることを意味します。両方の ' は*プレフィックスとサフィックス文字列と一致します。

つまり、シェルパターンは、*$'\n'*改行文字を1つ以上含むすべての文字列と一致します。つまり、テストは次のようになります。本物の複数行の文字列について$RBUFFER

テスト自体もシェルに書かれているように有効ですbash

おすすめ記事