我的zsh和bash都在一个文件中包含以下代码。
if test $SHELLNAME = zsh ; then
lss() { l -l ${1:-.}/*(s,S,t); }
laf() { l ${1:-.}/.*(.); }
lad() { l -d ${1:-.}/.*(/); }
lsw() { l -ld ${1:-.}/.*(R,W,X.^ND/); }
fi
SHELLNAME
是zsh
如果外壳程序是zsh并且bash
外壳程序是bash。
上面的每个函数都包含适用于zsh的代码,但不适用于bash。
当我获取此文件时,会出现以下错误。
bash: <filename>: line 67: syntax error near unexpected token `('
bash: <filename>: line 67: ` lss() { l -l ${1:-.}/*(s,S,t); }'
目前,我正在使用eval
绕过bash的语法检查。
if test $SHELLNAME = zsh ; then
# Using eval makes sure bash can't try to syntax-check these functions.
eval 'lss() { l -l ${1:-.}/*(s,S,t); }'
eval 'laf() { l ${1:-.}/.*(.); }'
eval 'lad() { l -d ${1:-.}/.*(/); }'
eval 'lsw() { l -ld ${1:-.}/.*(R,W,X.^ND/); }'
fi
有没有更好的解决方案来解决这个问题?(也许是一个不使用的eval
)