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 ]; ...
或! (($#)) && ...
或(($#)) || ...