使用 if else bash 脚本检查变量是否存在

UMR*_*UMR 1 bash

我尝试编写一个非常简单的 bash 脚本文件,名为bash_script.sh

#!/bin/bash

if [ -z $1 ];then
        echo $1
else
        echo 'no variable'
fi
Run Code Online (Sandbox Code Playgroud)

在终端中我尝试运行,./bash_script.sh hello但终端上的输出是no variable. 我在这里做错了什么?

tri*_*eee 7

-z如果其参数为空字符串,则该运算符为 true。hello不是空字符串,因此else采用该子句。

也许你的意思是简单地说

if [[ "$1" ]]; then
    echo "$1"
else
    echo 'no variable'
fi
Run Code Online (Sandbox Code Playgroud)

还要注意何时在 shell 变量周围加上引号(基本上总是如此,至少在您了解何时可能不想这样做之前)以及Bash 脚本中对[[over的偏好。[

但可能更惯用的是,如果您想允许多个参数,只需检查是否$#等于或大于零。1无论其中一些参数是否为空字符串,这都将工作相同。

为了完整起见,让原始脚本采用分支的方法if

./bash_script.sh ''
Run Code Online (Sandbox Code Playgroud)

(或者在空参数周围使用双引号而不是单引号)。