Ale*_*lls 1 bash shell-script test
只是想知道这是否:
if [ "$first_arg" == "major" ] || [ "$first_arg" == "minor" ]; then
exit 1;
fi
Run Code Online (Sandbox Code Playgroud)
与此相同:
if [ "$first_arg" == "major" || "$first_arg" == "minor" ]; then
exit 1;
fi
Run Code Online (Sandbox Code Playgroud)
小智 5
他们不一样。事实上[ "$first_arg" == "major" || "$first_arg" == "minor" ]
甚至不是一个有效的表达。
这是因为[
是一个等价于的命令,test
他们不能使用||
替代命令,它在命令间级别运行。历史上认为对替代方案正确的是-o
,但现在它被 POSIX 1标记为过时,建议重写
test "$1" -o "$2"
Run Code Online (Sandbox Code Playgroud)
进入
test "$1" || test "$2"
Run Code Online (Sandbox Code Playgroud)
除了test
and[
结构之外,还有“现代”[[
测试命令,它不完全接受-o
,而是接受||
.
因此,所有这些都是有效且等效的:
一项[[
测试:
if [[ $first_arg == major || $first_arg == minor ]]; then
exit 1;
fi
Run Code Online (Sandbox Code Playgroud)两个[[
测试:
if [[ $first_arg == major ]] || [[ $first_arg == minor ]]; then
exit 1;
fi
Run Code Online (Sandbox Code Playgroud)两个[
测试(标准等效项):
if [ "$first_arg" = major ] || [ "$first_arg" = minor ]; then
exit 1;
fi
Run Code Online (Sandbox Code Playgroud)$first_arg
里面不需要双引号[[
,因为那里没有分词或路径名扩展。但是,引号应该与 一起使用[
。引用minor
也没有意义major
。不仅在这里,而且与test
或[
也一起。那是因为它们是简单的字符串。
1. 见应用使用。