繁体   English   中英

bash shell 中的多个条件

[英]multiple conditions in bash shell

我在 Bash 中有这段代码,目标是比较两个文件,如果文件匹配并且没有传递强制参数,则退出。 其他方式它应该继续......

但是当我在没有参数的情况下运行并且脚本没有按预期停止时出现此错误[: :=: unexpected operator ,当我传递强制参数时,它可以正常工作。 请问有什么想法吗?

if    cmp -s  file1  file2  &&  [ $1 != "-f" ] ;  then 
"do something"
exit 1
else "do something"
fi

[... ]只是一个普通的命令,本质上等同于test 因此,如果您传递一个未加引号的空变量(例如$1 ,当您的程序没有提供 arguments 时),它将尝试运行[ != "-f" ] ,这会给出该错误,因为您需要两个边来比较!=

要解决这个问题,您可以使用[[... ]] (需要bash ,不兼容 POSIX),它不会使未引用的变量“消失”,或者您也可以引用您的变量以使其与 POSIX 兼容:

cmp -s file1 file2 && [[ $1 != "-f" ]]
cmp -s file1 file2 && [ "$1" != "-f" ]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM