Zsh 返回 '<function>:<linenumber> = 未找到'



我使用的具有以下在单独的脚本和混蛋中定义的tmux快捷函数,该功能正常但很混乱。我决定将其移至自然属于的.zshrc,并遇到一个我无法弄清楚的问题。

function t () {re='^[0-9]+$'
if [ "$1" == "kill" ]
then
        tmux kill-session -t $2
elif [[ "$1" =~ "$re" ]]
then
        tmux attach-session -d -t $1
fi}

我来源.zshrc,调用功能,然后获取:

t:1: = not found

我知道该功能已定义:

╭─bennett@Io [~] using
╰─○ which t
t () {
    re='^[0-9]+$'
    if [ "$1" == "kill" ]
    then
            tmux kill-session -t $2
    elif [[ "$1" =~ "$re" ]]
    then
            tmux attach-session -d -t $1
    fi
}

我假设这是在抱怨函数的第一行。我尝试将函数的第一行向下移动几行,这不会更改任何内容,除了错误消息是指。有什么线索发生了什么事?我在SO上没有发现与此特定问题有关的任何内容。

命令[(或test(仅支持一个=来检查两个字符串的平等。使用==将导致" = not found"错误消息。(请参阅man 1 test(

zsh[主要是出于兼容原因。它试图在可能的情况下实现POSIX,并在可能带来的所有怪癖(请参阅ZSH手册(。

除非您需要一个符合posix的脚本(例如,对于与其他外壳的兼容性(,我强烈建议使用条件表达式,即 [[ ... ]],而不是 [ ... ]。它具有更多的功能,不需要引号或其他解决方法可能是空值,甚至允许使用算术表达式。

将第一个有条件在第二组正方支架中包裹似乎可以解决问题。

有关单个与双括号的更多信息:[[]]在bash脚本中比[]优先?

最新更新