首页 > 解决方案 > 这个'if [ -e ${MY_VARIABLE} ]'是否检查linux中是否存在变量?

问题描述

我正在查看一个 bash 脚本,其中包含这样的语句:

if [ -e ${MY_VARIABLE} ]

-e 参数有什么作用?它是否检查变量是否存在?

标签: linux

解决方案


if [ -e ${MY_VARIABLE} ]

不检查变量是否存在。(为此,使用${MY_VARIABLE?}or ${MY_VARIABLE+}(或:?and :+)取决于你想要做什么。)

[命令永远不会看到字符串MY_VARIABLE。shell 解析字符串${MY_VARIABLE}并将其扩展传递给[. 如果 MY_VARIABLE 未设置(或者是空字符串),shell 调用命令[ -e ]并测试字符串-e是否为空(不是)。如果 MY_VARIABLE 已设置且非空,则[使用一些参数执行。如果 MY_VARIABLE 不包含任何空格(更准确地说,如果它不包含 IFS 中的值),则[正好看到 3 个参数( 、和-e的扩展值)并检查文件中是否存在由第二个参数命名的路径系统。如果 MY_VARIABLE 确实包含 IFS 的元素,则${MY_VARIABLE}][获得超过 3 个参数,并且(可能)发出一条错误消息,抱怨意外的参数。(如果 $MY_VARIABLE 进行字段拆分,则不一定是错误。例如,如果 ${MY_VARIABLE} 扩展为 string ,/ -a -e /etc则将[使用参数调用-e, /, -a, -e,/etc]检查是否存在于文件系统。)//etc

上面描述的大部分行为都被正确地认为是晦涩的,并且是最佳实践鼓励使用双引号的主要原因之一;if [ -e "${MY_VARIABLE}" ]是检查 $MY_VARIABLE 中命名的文件是否存在的首选方法之一。


推荐阅读