2015-06-30 86 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}." 

這將打印「你的性別是一個祕密。 「當你不輸入 性別。請注意,默認值用於擴展時間,未分配給該參數的是 。

相關問題