Answers:
要检查命令是否没有提供参数,请检查$#变量的值,
if [ $# -eq 0 ]; then
echo "No arguments provided"
exit 1
fi
如果您想使用$*(不是首选),
if [ "$*" == "" ]; then
echo "No arguments provided"
exit 1
fi
一些解释:
第二种方法不是可取的,因为在位置参数扩展中*,从一个开始扩展到位置参数。当在双引号内进行扩展时,它将扩展为一个单词,每个参数的值由IFS特殊变量的第一个字符分隔。这意味着将构造一个字符串。因此有额外的开销。
另一方面#扩展到位置参数的数量。
例:
$ command param1 param2
这里,
的值$#是2和值的$*是字符串“参数1参数2”(没有引号),如果IFS未设置。因为如果未设置IFS,则参数之间用空格分隔
有关更多详细信息man bash,请阅读名为特殊参数的主题。
[ $# -eq 0 ]是IME最常见的形式。在某些情况下"$#"可以为空:如果有一个参数为空,或者有多个空参数$IFS为空。
"$*"表达式还将求值。但是大多数时候您可能根本不会在意。""""
bash。您正在sh用来执行脚本。AFAIK ==仅在中有效bash。
这是您知道自己没有任何论点的方式之一
NO_ARGS=0
if [ $# -eq "$NO_ARGS" ]; then
{do something}
fi
if ! (($#)); ...或或if (($# == 0)); ...或if [ $# -eq 0 ]; ...或! (($#)) && ...或(($#)) || ...