我使用的具有以下在单独的脚本和混蛋中定义的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脚本中比[]优先?