Linux bash中`if [ -e ${MY_VARIABLE} ]`是否用于检查变量是否存在?
-e参数的作用
-e是Bash内置test命令(即[ ]语法对应的命令)的文件检测参数,作用是检测指定路径的文件或目录是否存在,和变量本身是否存在没有关系。
你给出的语句if [ -e ${MY_VARIABLE} ]的实际执行逻辑是:
- 先取
MY_VARIABLE变量的值作为目标路径 - 检测该路径下是否存在任意类型的文件(包括普通文件、目录、软链接、设备文件等)
- 存在则条件判断为真,否则为假
常见错误注意
如果MY_VARIABLE本身未定义,这个语句不会实现「检测变量是否存在」的效果:
- 当变量未定义且你没有给变量加引号时,语句会变成
if [ -e ],此时Bash会默认判断-e这个字符串是否非空,永远返回真 - 当变量未定义但你加了引号,即
if [ -e "${MY_VARIABLE}" ]时,语句会变成判断空字符串对应的路径是否存在,永远返回假
两种情况都达不到检测变量是否存在的目的。
如果需要检测变量MY_VARIABLE是否被定义,正确写法如下:
- Bash 4.2及以上版本可用:
if [ -v MY_VARIABLE ] - 兼容旧版本Bash的通用写法:
if [ -z "${MY_VARIABLE+set}" ]
内容的提问来源于stack exchange,提问作者user12303345
相关产品推荐
相关产品推荐

