$ {var:-word}和$ {var-word}之间有什么区别?

时间:2015-06-30 11:13:44

标签: bash parameters

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

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

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

1 个答案:

答案 0 :(得分:8)

来自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}."
     

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