2015-06-30 85 views
1

我发现了一个bash脚本以下命令:

git blame $NOT_WHITESPACE --line-porcelain "${[email protected]}" -- "$file" 

是什么${[email protected]}是什么意思?尝试一下,它会返回第二个参数,如果不存在则返回“@”。 According to the documentation${2:[email protected]}应该这样做。我试过了,它的确如此。有什么不同?它在哪里记录?手册页似乎没有提到这个符号。

+0

请参阅'man bash','Parameter Expansion'。这两种形式之间没有区别,但据我记得第二个'$ {2:。@}'应该是首选。 – helpermethod

+1

@helpermethod有一个细微的差别。看到我的答案。 – fedorqui

+1

@fedorqui谢谢你的改正,完全忘了差别。 – helpermethod

回答

8

Bash hackers wiki - parameter expansion

$ {参数:-word}

$如果参数参数是未设置(从来没有被定义){参数WORD}

或空 (空),这个扩展为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}." 

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

相关问题