*$'\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 ]]测试变量的值是否与给定的 shell 模式匹配。

在本例中,该模式是*$'\n'*。模式的部分$'\n'表示文字换行符。 $'...'一般来说是一个“ANSI C字符串”,这意味着内部的反斜杠转义序列$'...'被解释为C语言标准所描述的,其中\n是换行符、\t制表符等。两侧的*'s 将匹配任何前缀和后缀字符串。

简而言之,shell 模式*$'\n'*将匹配任何至少包含一个换行符的字符串。换句话说,测试将是真的对于 中的任何多行字符串$RBUFFER

正如 shell 中所写的那样,测试本身也是有效的bash

相关内容