linux - 这个'if [ -e ${MY_VARIABLE} ]'是否检查linux中是否存在变量?
问题描述
我正在查看一个 bash 脚本,其中包含这样的语句:
if [ -e ${MY_VARIABLE} ]
-e 参数有什么作用?它是否检查变量是否存在?
解决方案
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 中命名的文件是否存在的首选方法之一。
推荐阅读
- c# - 如何在实体框架中对外键应用级联删除
- tensorflow - 无法将张量流导入我的 python 代码
- mongodb - 有没有办法操纵 mongo db 聚合查询的结果以返回单个对象
- javascript - 数组中图像的布局
- javascript - 将嵌套数组中的值设置为 null 的功能方法
- lookup-tables - 如何为员工姓名查找表提供同义词?
- jquery - 隐藏其他选项卡的内容并仅显示选定选项卡的内容
- r - 打印列中具有相同值的行中的级别计数
- android - 如何通过android studio运行本机android项目
- java - API请求(GET调用)是否可以向客户端返回响应并启动后台任务以完成请求