Unix脚本错误:[:参数太多了

时间:2017-10-25 10:05:00

标签: unix sh

我有这个代码输出:

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" = "" ] ];

我已经在变量中加了双引号,但我仍遇到此错误。我怎么可能做错了?

提前致谢。干杯!

1 个答案:

答案 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