【问题标题】:What is the difference between ${var:-word} and ${var-word}?${var:-word} 和 ${var-word} 有什么区别?
【发布时间】:2015-06-30 11:13:43
【问题描述】:

我在 bash 脚本中找到了以下命令:

git blame $NOT_WHITESPACE --line-porcelain "${2-@}" -- "$file"

${2-@} 是什么意思?试一试,它返回第二个参数,如果不存在则返回“@”。 According to the documentation${2:-@} 也应该这样做。我试过了,它确实是一样的。有什么不同?它记录在哪里?手册页似乎没有说明这种表示法。

【问题讨论】:

  • man bashParameter Expansion。这两种形式没有区别,但据我记得第二种形式${2:.@} 应该是首选。
  • @helpermethod 略有不同。看我的回答。
  • @fedorqui 谢谢指正,完全忘记了区别。

标签: bash parameters


【解决方案1】:

来自Bash hackers wiki - parameter expansion

${PARAMETER:-WORD}

${PARAMETER-WORD}

如果参数 PARAMETER 未设置(从未定义)或 null (空),这个扩展为WORD,否则扩展为值 PARAMETER,就好像它只是 ${PARAMETER}。 如果您省略 : (冒号),如第二种形式所示,只使用默认值 参数未设置时,而不是为空时。

echo "Your home directory is: ${HOME:-/home/$USER}."
echo "${HOME:-/home/$USER} will be used to store your personal data."

如果 HOME 未设置或为空,则每次您要打印某些内容时 有用,你需要把那个参数语法放进去。

#!/bin/bash

read -p "Enter your gender (just press ENTER to not tell us): " GENDER
echo "Your gender is ${GENDER:-a secret}."

它将打印“你的性别是一个秘密”。当你不输入 性别。请注意,默认值用于扩展时间,它是 未分配给参数。

【讨论】:

    猜你喜欢
    • 2013-06-28
    • 2019-09-21
    • 2018-12-07
    • 1970-01-01
    • 1970-01-01
    • 2011-06-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多