有一个 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 ]]
测试变量的值是否与给定的 shell 模式匹配。
在本例中,该模式是*$'\n'*
。模式的部分$'\n'
表示文字换行符。 $'...'
一般来说是一个“ANSI C字符串”,这意味着内部的反斜杠转义序列$'...'
被解释为C语言标准所描述的,其中\n
是换行符、\t
制表符等。两侧的*
's 将匹配任何前缀和后缀字符串。
简而言之,shell 模式*$'\n'*
将匹配任何至少包含一个换行符的字符串。换句话说,测试将是真的对于 中的任何多行字符串$RBUFFER
。
正如 shell 中所写的那样,测试本身也是有效的bash
。