zoukankan      html  css  js  c++  java
  • bash ${-:+-$-} -c

    .

    .

    .

    .

    .

    同事在 shell 脚本中看到一条奇怪的指令:

    bash ${-:+-$-} -c 'command'

    bash -c 'command' 这个容易理解,就是启动一个 bash 子进程,并执行一条 'command' 指令,可是里面的 ${-:+-$-} 是什么意思呢?

    同事问我,并说这句奇怪的语句竟然能正常执行,我表示从未见过这种写法。

    于是经过一番搜索和测试,发现了 shell 脚本中 ${} 指令的一种扩展用法。

    通常我们使用 ${} 指令是取变量的值,或者做字符串截取,然而它还有其它高级用法。

    接下来我们把这个表达式一一拆分来看。

    一、我们都知道,在 shell 中以 $ 符号开头的变量都是内置变量,我们来认识一个内置变量:

    $- 表示当前 shell 使用的选项,也就是通过 set 命令为 shell 设置的选项。

    二、${} 运算符可以根据变量不同的状态(未设定、空值、非空值)返回不同的值

    ${} 指令很强大,有关于 ${} 指令的更多用法,请参见文末的参考文献。

    在本例中,使用的运算符是 ${:+}。
    ${a:+b} 这条语句的意思是,如果变量 a 为非空值,则返回字符串b。

    明白了 $- 变量和 ${:+} 运算符的含义,相信大家应该立即明白了 ${-:+-$-} 的含义:当 $- 不为空时,返回字符串“-”和变量$-连接在一起的新字符串。

    举个栗子:假设当前 shell 的参数是 himBHs,也就是当 $- == himBHs 时,由于 $- 不为空,所以返回 -$-,因此 ${-:+-$-} 返回的结果就是 -himBHs 这个字符串。

    # 所以这条命令解析之后就变成了:
    bash -himBHs -c 'command'

    结论:

    ${-:+-$-} 的含义是,将当前 shell 的选项作为子进程(bash)的选项。

    参考文献:

    shell中${}和()的使用

    shell中set命令

  • 相关阅读:
    Linux服务器基本信息查看
    Linxu下jenkins部署和基本配置
    Python常见序列详解
    Git 操作
    Python操作Mongodb
    sqlalchemy ORM模块使用介绍
    linux之sed的常用操作
    Python pandas学习笔记
    正则表达式——字符串匹配
    1,2,2,3,3,3,4,4,4,4,5,5,5,5,5,6,...输入位置输出该位置上的数字,如输入10输出4,输入11输出5.
  • 原文地址:https://www.cnblogs.com/0xcafebabe/p/12720768.html
Copyright © 2011-2022 走看看