我想知道是否提供了参数。但我不知道为什么这段代码不起作用。我做错了什么?
if ![ -z "$1" ]
then
echo "$1"
fi
答案 0 :(得分:6)
我们问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.
答案 1 :(得分:4)
您可以检查给定参数的数量。 $#
表示传递给脚本或函数的参数数量 - 或包含参数的数组的长度。如果它为零则没有传递任何参数。以下是关于positional parameters的一般信息。
$ 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 $#
这将返回与第一个示例中相同的结果。