如何检查命令是否没有提供参数?

如何检查命令是否没有提供参数?

如何检查是否$*为空?换句话说,如何检查是否没有向命令提供参数?

答案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

相关内容