我在我们的一些脚本中看到,shell 变量附加了一个连字符。例如:

if [ -z ${X-} ]

变量旁边的这个连字符在这里做什么。
我在网上找不到任何相关文档。

最佳答案

这一切都在 Shell Parameter Expansion section of the manual 中进行了解释:



在此之前有:



所以:

${X-stuff}

扩展为:
  • $X 的扩展,如果设置了 X
  • stuff 如果 X 未设置。

  • 尝试一下:
    $ unset X
    $ echo "${X-stuff}"
    stuff
    $ X=
    $ echo "${X-stuff}"
    
    $ X=hello
    $ echo "${X-stuff}"
    hello
    $
    

    现在你的扩展是
    ${X-}
    

    所以你猜如果 $X 被设置,它会扩展到 X 的扩展,如果 X 没有设置,它会扩展到空字符串。

    你为什么想做这个?对我来说,这似乎是 set -u 的一种解决方法:
    $ set -u
    $ unset X
    $ echo "$X"
    bash: X: unbound variable
    $ echo "${X-}"
    
    $
    

    最后,你的测试
    if [ -z "${X-}" ]
    

    (注意引号,它们是强制性的)测试 X 是否为零(无论是否设置了 X,即使使用了 set -u)。

    关于bash - 什么是shell变量旁边的连字符,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32964357/

    10-13 07:27
    查看更多