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运行代码以捕获更明显的错误。哇,非常感谢!实际上我正在调试此脚本。谢谢!