嵌套 if/else 的 zsh 脚本解析器错误
zsh script parser error for nested if/else
我有以下简陋的 zsh 功能:
function remember()
{
if [ "" != "" ]
then
if[ "" != "clean" ]
then
echo "Why";
#echo >> {~/.remember_info};
else
rm -r ~/.remember_info;
touch ~/.remember_info;
fi
else
cat .remember_info;
fi
}
当我尝试获取它时,我得到:
`echo' 附近的解析错误(echo 是带有 echo "Why"; 的那一行)
这个错误是非描述性的,我认为它与循环逻辑的一部分有关(因为无论我给出什么指令,它都会出错)。
有什么办法可以"debug"这种事情吗? zsh -n 没有多大帮助(根本)
您在 [
之后缺少一个空格。应该是:
function remember()
{
if [ "" != "" ]
then
if [ "" != "clean" ]
then
echo "Why";
#echo >> {~/.remember_info};
else
rm -r ~/.remember_info;
touch ~/.remember_info;
fi
else
cat .remember_info;
fi
}
[
等同于 test
。它是一个单独的命令,在 man test
:
中有描述
TEST(1)
NAME
test - check file types and compare values
SYNOPSIS
test EXPRESSION
test
[ EXPRESSION ]
[ ]
[ OPTION
与 clean
进行比较时,您忘记了 if
和 [
之间的 space。
不过,在这种情况下,您可以通过先处理 =
情况来简化您的函数。
function remember()
{
if [ "" = "" ]; then
cat ~/.remember_info
elif [ "" = clean ]; then
rm -r ~/.remember_info
touch ~/.remember_info
else
echo "" >> ~/.remember_info;
fi
}
或者,使用 case
语句。
remember () {
f=~/.remember_info
case of
"")
cat "$f"
;;
clean)
rm -r "$f"
touch "$f"
;;
*)
print "" >> "$f"
;;
esac
}
我有以下简陋的 zsh 功能:
function remember()
{
if [ "" != "" ]
then
if[ "" != "clean" ]
then
echo "Why";
#echo >> {~/.remember_info};
else
rm -r ~/.remember_info;
touch ~/.remember_info;
fi
else
cat .remember_info;
fi
}
当我尝试获取它时,我得到:
`echo' 附近的解析错误(echo 是带有 echo "Why"; 的那一行)
这个错误是非描述性的,我认为它与循环逻辑的一部分有关(因为无论我给出什么指令,它都会出错)。
有什么办法可以"debug"这种事情吗? zsh -n 没有多大帮助(根本)
您在 [
之后缺少一个空格。应该是:
function remember()
{
if [ "" != "" ]
then
if [ "" != "clean" ]
then
echo "Why";
#echo >> {~/.remember_info};
else
rm -r ~/.remember_info;
touch ~/.remember_info;
fi
else
cat .remember_info;
fi
}
[
等同于 test
。它是一个单独的命令,在 man test
:
TEST(1)
NAME
test - check file types and compare values
SYNOPSIS
test EXPRESSION
test
[ EXPRESSION ]
[ ]
[ OPTION
与 clean
进行比较时,您忘记了 if
和 [
之间的 space。
不过,在这种情况下,您可以通过先处理 =
情况来简化您的函数。
function remember()
{
if [ "" = "" ]; then
cat ~/.remember_info
elif [ "" = clean ]; then
rm -r ~/.remember_info
touch ~/.remember_info
else
echo "" >> ~/.remember_info;
fi
}
或者,使用 case
语句。
remember () {
f=~/.remember_info
case of
"")
cat "$f"
;;
clean)
rm -r "$f"
touch "$f"
;;
*)
print "" >> "$f"
;;
esac
}