gpt4 book ai didi

Zsh 返回 `: = not found`

转载 作者:行者123 更新时间:2023-12-02 09:18:53 26 4
gpt4 key购买 nike

我使用了在单独的脚本中定义的以下 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,这可能会带来所有怪癖(See the Zsh Manual)。

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

关于Zsh 返回 `<function>:<linenumber> = not found`,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44341591/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com