Zsh返回`<;功能>;:&书信电报;行号>;=找不到`

Zsh返回`<;功能>;:&书信电报;行号>;=找不到`,zsh,Zsh,我使用了在一个单独的脚本中定义了以下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} 我从.

我使用了在一个单独的脚本中定义了以下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
}

我假设这是在抱怨函数的第一行。我已经尝试将函数的第一行向下移动了几行,这不会改变任何东西,除了错误消息所指的行。有什么线索吗?我没有找到任何与此特定问题相关的内容。

将第一个条件用第二组方括号括起来似乎可以解决此问题

有关单括号与双括号的更多信息,请参见:
命令
[
(或
测试
)仅支持单个
=
来检查两个字符串是否相等。使用
=
将导致“
=未找到
”错误消息。(请参阅
人工1测试

zsh
内置了
[
主要是出于兼容性的原因。它尝试在可能的情况下实现POSIX,以及它可能带来的所有怪癖()

除非您需要与POSIX兼容的脚本(例如,为了与其他shell兼容),否则我强烈建议您使用条件表达式,即
[…]]
,而不是
[…]
。它具有更多功能,不需要引号或其他可能为空值的变通方法,甚至允许使用算术表达式