次の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
。