我有这个代码输出:
1: '[' '[' "" = "" ']'
2: script.sh: line 7: [: too many arguments
3: '[' '[' artifact1,artifact2,artifact3,artifact4,artifact5 = "" ']'
4: '[' '[' 2.14 = "" ']'
5: '[' '[' N = "" ']'
6: script.sh: line 7: [: too many arguments
以下是代码的一部分:
set -x
NEW_TAG = "";
TAGS = artifact1,artifact2,artifact3,artifact4,artifact5;
VERSION = 2.14;
FIX = N;
if [ [ "$NEW_TAG" = "" ] || [ "$TAGS" = "" ] || [ "$VERSION" = "" ] || [ "$FIX" = "" ] ];
我已经在变量中加了双引号,但我仍遇到此错误。我怎么可能做错了?
提前致谢。干杯!
答案 0 :(得分:1)
[
是test
命令的另一个名称,而不是像括号一样的分组运算符。
您的if
声明等同于
if test [ "$NEW_TAG" = "" || ...
如果第一个参数是test
,那么和[
不会指望更多参数(在这种情况下它没有特殊含义;它只是一个非enpty字符串)。
使用多个测试的正确方法是
if [ "$NEW_TAG" = "" ] || [ "$TAGS" = "" ] || [ "$VERSION" = "" ] || [ "$FIX" = "" ];
您不需要任何分组,但如果您真的想要,可以使用{ ... }
:
if { [ "$NEW_TAG" = "" ] ||
[ "$TAGS" = "" ] ||
[ "$VERSION" = "" ] ||
[ "$FIX" = "" ]; };
注意;
用于终止{ ... }
内的命令列表。
此外,使用-z
运算符检查字符串是否为空,它会更短(错误的空间更小)。
if [ -z "$NEW_TAG" ] || [ -z "$TAGS" ] || [ -z "$VERSION" ] || [ -z "$FIX" ]; then