我使用了以下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上找不到与此特定问题相关的任何内容。
答案 0 :(得分:2)
命令[
(或test
)仅支持单个=
来检查两个字符串是否相等。使用==
会导致出现“= not found
”错误消息。 (见man 1 test
)
zsh
内置[
主要是出于兼容性原因。它试图在可能的情况下实现POSIX,这可能带来所有的怪癖(See the Zsh Manual)。
除非您需要脚本符合POSIX(例如,为了与其他shell兼容),我强烈建议使用条件表达式,即[[ ... ]]
,而不是[ ... ]
。它具有更多功能,不需要引号或其他可能为空值的变通方法甚至允许使用算术表达式。
答案 1 :(得分:0)
将第一个条件包装在第二组方括号中似乎解决了这个问题。
有关单支架和双支架的更多信息,请点击此处: Is [[ ]] preferable over [ ] in bash scripts?