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

wel*_*lly 117 shell bash parameter shell-script

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

Sac*_*kar 172

要检查是否没有提供给命令的参数,请检查$#变量的值,然后,

if [ $# -eq 0 ]; then
    echo "No arguments provided"
    exit 1
fi
Run Code Online (Sandbox Code Playgroud)

如果你想使用$*不推荐)那么,

if [ "$*" == "" ]; then
    echo "No arguments provided"
    exit 1
fi
Run Code Online (Sandbox Code Playgroud)

一些解释:

第二种方法并不可取,因为在位置参数扩展中*,从一个开始扩展到位置参数。当扩展发生在双引号内时,它扩展为单个单词,每个参数的值由 IFS 特殊变量的第一个字符分隔。这意味着构造了一个字符串。所以有额外的开销。

另一方面#扩展到位置参数的数量。

例子:

$ command param1 param2

这里,

的值$#是2和的值$*是字符串“参数1参数2”(没有引号),如果IFS未设置。因为如果IFS未设置,参数之间用空格隔开

有关更多详细信息man bash并阅读名为特殊参数的主题

  • `[ $# -eq 0 ]` 是最常见的输入法形式。存在“$#”可以为空的极端情况:如果有一个参数为空,或者如果有多个空参数并且“$IFS”为空。 (8认同)
  • 或者`如果!(($#)); ...`, 或 `if (($# == 0)); ...`,或`if [ $# -eq 0 ]; ...`,或`!(($#)) && ...` 或 `(($#)) || ...` (5认同)

Pat*_*Pat 22

如果您只对缺少特定参数的情况感兴趣,那么参数替换非常棒:

#!/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
Run Code Online (Sandbox Code Playgroud)