如何检查 $1 和 $2 是否为空?

如何检查 $1 和 $2 是否为空?

我正在运行一些传递字符串参数的脚本,并且我想执行如下所示的 if else 语句:

if [ $1 != '' ] && [ $2 != '' ]
then 
    do something.....

但它显示了Error too many argument。为什么?

答案1

尝试使用 -z 测试:

if [ -z "$1" ] && [ -z "$2" ]

来自 man bash

-z string
   True if the length of string is zero.

答案2

由于这是标记的bash,我建议使用扩展测试构造 ( [[...]]),忘记引号:

if [[ -z $1 && -z $2 ]]; then
...

除非您要实现sh/POSIX 兼容性,否则没有理由不使用[[ ]]

答案3

下面的方法也适用,

if [ "$1" == "" && "$2" == ""]; then
    echo NULL
fi

答案4

我认为帖子的标题不准确,因为消息中的意图是检查 $1 和 $2 是否不为空。给出的示例只是缺少 $1 和 $2 中的双引号才能工作。比较字符串时,变量必须用双引号括起来才能展开。但是,检查 $1 和 $2 是否存在与检查 $2 是否存在相同,因为如果 $1 不存在,它就不可能存在。在这种情况下也不需要“if”命令,因为“test”返回 true/false,并且如果返回 0/true,则使用“&&”作为“then”:

[ "$2" != '' ] && commands...

更简单,使用 -n (非零):

[ -n "$2" ] && commands...

“检查 $1 和 $2 是否为空”与检查是否没有参数相同:

[ $# -eq 0 ] && commands...

相关内容