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

Unix脚本错误:[:参数太多,unix,sh,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 以下是代码的一部分:

我有这样的代码输出:

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" = "" ] ];
我已经在变量中加了双引号,但仍然遇到这个错误。我会做错什么


提前感谢。干杯!

[
测试
命令的另一个名称,而不是像括号一样的分组运算符

您的
if
语句与

if test [ "$NEW_TAG" = "" || ...
如果第一个参数是
[
(在本例中,它没有特殊意义;它只是一个非enpty字符串),那么
test
不需要更多参数

使用多个测试的正确方法是

if [ "$NEW_TAG" = "" ] || [ "$TAGS" = "" ] || [ "$VERSION" = "" ] || [ "$FIX" = "" ];
您不需要任何分组,但如果确实需要,可以使用
{…}

if { [ "$NEW_TAG" = "" ] ||
     [ "$TAGS" = "" ] ||
     [ "$VERSION" = "" ] ||
     [ "$FIX" = "" ]; };
注意用于终止
{…}
中的命令列表的

此外,使用
-z
操作符检查字符串是否为空的时间要短一些(错误空间更小)

if [ -z "$NEW_TAG" ] || [ -z "$TAGS" ] || [ -z "$VERSION" ] || [ -z "$FIX" ]; then

[
实际上是该命令的别名。我建议您阅读手册页了解。是的,这是否意味着我的语法错误?我只是比较了$string1=空字符串或NULL。是;
[
是一个命令名,而不是分组运算符。您的变量赋值也错误;
=
NEW\u TAG=“”
(或仅
NEW\u TAG=
)。通过shellcheck.net运行代码以捕获更明显的错误。哇,非常感谢!实际上我正在调试此脚本。谢谢!