加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

bash – “加冒号”(“:”)在shell脚本表达式中的含义是什么?

发布时间:2020-12-15 18:59:02 所属栏目:安全 来源:网络整理
导读:这是什么意思? if ${ac_cv_lib_lept_pixCreate+:} false; then : $as_echo_n "(cached) " 6else ac_check_lib_save_LIBS=$LIBS 看起来像ac_cv_lib_lept_pixCreate是一些变量,那么:是什么意思? 在哪里学习大括号表达式的完整语法?这个语法的名称是什么?
这是什么意思?
if ${ac_cv_lib_lept_pixCreate+:} false; then :
  $as_echo_n "(cached) " >&6
else
  ac_check_lib_save_LIBS=$LIBS

看起来像ac_cv_lib_lept_pixCreate是一些变量,那么:是什么意思?

在哪里学习大括号表达式的完整语法?这个语法的名称是什么?

在“加冒号”${…:}表达式中,只有shell具有特殊含义.在这种情况下,冒号只是一个字符串值,因此我们可以将该代码段写为${…“:”}.

为方便起见,让我们假装变量名为var,并考虑表达式:

if ${var+:} false; then ...

如果shell变量$var存在,则整个表达式替换为:如果不是,则返回空字符串.

因此整个表达式${var:} false变为:false(返回true)或false(返回false).

这归结为存在的测试,即使变量没有赋值,也可以为真.

它是非常神秘的,但实际上,它是存在变量的少数测试之一,它实际上适用于Bourne血统的大多数(如果不是全部)炮弹.

可能的等价物:(在这里替换var的任何变量名)

if [[ ${var+"is_set"} == is_set ]]; then ...

或者,可能更便携:

case ${var+"IS_SET"} in IS_SET) ...;; esac

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读