我想查看是否提供了参数。但是我不知道为什么这段代码不起作用。我做错了什么?
if ![ -z "$1" ]
then
echo "$1"
fi
我想查看是否提供了参数。但是我不知道为什么这段代码不起作用。我做错了什么?
if ![ -z "$1" ]
then
echo "$1"
fi
让我们向shellcheck请教:
In file line 1:
if ![ -z "$1" ]
^-- SC1035: You need a space here.
换句话说:
if ! [ -z "$1" ]
then
echo "$1"
fi
如果根据您的评论,它仍然无法工作,并且您恰好是从一个函数中执行此操作,则函数的参数将掩盖脚本的参数,因此我们必须明确传递它们:
In file line 8:
call_it
^-- SC2119: Use call_it "$@" if function's $1 should mean script's $1.
[ ! -z "$1" ]
,但我想这只是个人口味的问题。 - Saucier$1
指的是传递给函数的参数,而不是shell脚本的参数。 - alvitscall_it()
,则您将像这样调用它call_it "$@"
。 - alvits$#
表示传递给脚本或函数的参数数量,或包含参数的数组的长度。 如果为零,则没有传递任何参数。 这里有一篇关于位置参数的好文章。$ cat script
#!/usr/bin/env bash
if (( $# == 0 )); then
echo "No parameters provided"
else
echo "Number of parameters is $#"
fi
结果:
$ ./script
No parameters provided
$ ./script first
Number of parameters is 1
$ ./script first second
Number of parameters is 2
$ cat script
#!/usr/bin/env bash
_checkParameters()
{
if (( $1 == 0 )); then
echo "No parameters provided"
else
echo "Number of parameters is $1"
fi
}
_checkParameters $#
my-command
)和第一个参数为显式空字符串(my-command ""
)的情况。 - chepner
if [ -n "$1" ]
,代码会更易读。然而,最好使用$#
来返回参数的数量。 - alvits[[ ... ]]
而不是[ ... ]
-[[ ... ]]
更加强大并具有更多功能。 因此:[[ ! -z $1 ]]
或[[ -n $1 ]]
(在这些情况下使用[[ ... ]]
时,您可以但不必为$1
加上双引号)。 - mklement0