Bash 嵌套if/else的zsh脚本分析器错误
我有以下功能:Bash 嵌套if/else的zsh脚本分析器错误,bash,scripting,zsh,Bash,Scripting,Zsh,我有以下功能: function remember() { if [ "$1" != "" ] then if[ "$1" != "clean" ] then echo "Why"; #echo $1 >> {~/.remember_info}; else rm -r ~/.remember_info; touch ~/.remember_info; fi else cat .reme
function remember()
{
if [ "$1" != "" ]
then
if[ "$1" != "clean" ]
then
echo "Why";
#echo $1 >> {~/.remember_info};
else
rm -r ~/.remember_info;
touch ~/.remember_info;
fi
else
cat .remember_info;
fi
}
当我试图找到它的来源时,我得到:
“echo”附近的分析错误(echo是带有echo“Why”的行)
错误是非描述性的,我假设它与循环逻辑的一部分有关(因为无论我给出什么指令,它都会出错)
有没有办法“调试”这种东西?zsh-n没有多大帮助。您在
[
之后缺少一个空格。它应该是:
function remember()
{
if [ "$1" != "" ]
then
if [ "$1" != "clean" ]
then
echo "Why";
#echo $1 >> {~/.remember_info};
else
rm -r ~/.remember_info;
touch ~/.remember_info;
fi
else
cat .remember_info;
fi
}
[
与test
相同。它是一个单独的命令,如人工测试
中所述:
TEST(1)
NAME
test - check file types and compare values
SYNOPSIS
test EXPRESSION
test
[ EXPRESSION ]
[ ]
[ OPTION
与
clean
相比,您忘记了if
和[
之间的空格
不过,在这种情况下,可以通过先处理=
案例来简化函数
function remember()
{
if [ "$1" = "" ]; then
cat ~/.remember_info
elif [ "$1" = clean ]; then
rm -r ~/.remember_info
touch ~/.remember_info
else
echo "$1" >> ~/.remember_info;
fi
}
或者,使用case
语句
remember () {
f=~/.remember_info
case $1 of
"")
cat "$f"
;;
clean)
rm -r "$f"
touch "$f"
;;
*)
print "$1" >> "$f"
;;
esac
}
您可以使用“zsh-xv”命令进行调试。