Bash测试-应为一元运算符
我有下列支票。我尝试调用带2个参数的isValid函数Bash测试-应为一元运算符,bash,Bash,我有下列支票。我尝试调用带2个参数的isValid函数 if [ $(isValid $road $number) -eq 0 ] ; then (...) 作为回报,我得到: [: -eq: unary operator expected 在这种情况下,我希望使用[]而不是[]。我逃避了与你的争吵,但没有成功。 我错过了什么 编辑: 如果[$isValid$road$number-等式0];然后 这将检查标准输出是否等于0。例: if [ $(echo 0) -eq 0 ] ; then
if [ $(isValid $road $number) -eq 0 ] ; then
(...)
作为回报,我得到:
[: -eq: unary operator expected
在这种情况下,我希望使用[]而不是[]。我逃避了与你的争吵,但没有成功。
我错过了什么
编辑:
如果[$isValid$road$number-等式0];然后
这将检查标准输出是否等于0。例:
if [ $(echo 0) -eq 0 ] ; then
回声0输出0。然后,使用[命令]检查命令echo 0的输出是否等于0。如果表达式为true,则[命令]返回零状态。如果表达式为false,则返回非零状态
您要检查命令的退出状态。只需:
if isValid "$roud" "$number"; then
当命令的退出状态为0时,if表达式运行。您可以使用!command反转退出状态。isValid$road$number的输出是什么?如果我错了,请纠正我,但是$echo 0在子shell中运行echo 0,因此它给我们0。那么,$echo 0-eq 0不应该为真吗?[$echo 0-eq 0]将以0退出状态返回。这是真的。在计算机中,0退出状态被视为成功,非零是失败。开始时可能会让人困惑,但您可以习惯。例如,true命令以零状态返回,而false返回1。因此,如果[$echo 0-eq 0]为真,则不应该[$isValid$road$number-eq 0]是否也是真的?否。isValid不输出0。输出->使用命令的文件描述符1进入标准输出的内容。它不回显0或printf 0或类似内容。函数isValid返回0。它设置退出状态。您可以使用$?,例如:out=$isValid$road$number;ret=$?;echo isValid output$out;echo isValid返回:$ret。命令替换$…`用命令的标准输出内容展开,并删除尾随空行。
if isValid "$roud" "$number"; then