我意识到这是一个简单的问题,但由于 bash 中严格的语法要求,我发现很难得到答案。我有以下脚本:
if ! [ [ -z "$1" ] || [ -z "$2" ] ]; then
echo "both arguments are set!"
fi
当我不带参数运行它时,我得到以下输出:
./test: line 3: [: -z: binary operator expected
both arguments are set!
我不期待任何输出 - 两个参数都没有设置。我究竟做错了什么?
方括号不是分组结构bash
. [
只是一个别名test
命令,参数被正常解析。和||
是分隔命令的 shell 运算符。
如果你想对多个命令进行分组,你可以使用()
子 shell 语法。
if ! ([ -z "$1" ] || [ -z "$2" ]);
or the { }
分组语法:
if ! { [ -z "$1" ] || [ -z "$2" ]; };
或者您可以使用一次调用test
,其内置-o
操作员:
if ! [ -z "$1" -o -z "$2" ]
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)