如何检查是否$*
为空?换句话说,如何检查是否没有向命令提供参数?
答案1
要检查是否没有向命令提供参数,请检查$#
变量的值,
if [ $# -eq 0 ]; then
>&2 echo "No arguments provided"
exit 1
fi
如果你想使用$*
(不优选) 然后,
if [ "$*" == "" ]; then
>&2 echo "No arguments provided"
exit 1
fi
一些解释:
第二种方法并不可取,因为在位置参数扩展中*
,从 1 开始扩展到位置参数。当扩展发生在双引号内时,它会扩展为单个单词,每个参数的值由 IFS 特殊变量的第一个字符分隔。这意味着构造了一个字符串。所以有额外的开销。
另一方面#
扩展到位置参数的数量。
例子:
$ command param1 param2
这里,
如果未设置 IFS,则的值为$#
2,值为$*
字符串“param1 param2”(不带引号)。因为如果未设置IFS,参数之间用空格分隔
有关更多详细信息man bash
并阅读名为特殊参数
答案2
如果您只对缺少特定参数的情况感兴趣,参数替换是很棒的:
#!/bin/bash
# usage-message.sh
: ${1?"Usage: $0 ARGUMENT"}
# Script exits here if command-line parameter absent,
#+ with following error message.
# usage-message.sh: 1: Usage: usage-message.sh ARGUMENT
答案3
这是你知道自己没有任何争论的方法之一
NO_ARGS=0
if [ $# -eq "$NO_ARGS" ]; then
{do something}
fi