2015-09-02 39 views

回答

11

在Bourne shell和衍生工具Bash中,:是一個沒有操作的命令:也就是說,它什麼都不做,但參數是正常計算的。將其與一個評論(#)相比較,該評論什麼都不做(在#之後,簡單忽略)。

這句法:

: ${POSTGRES_USER:=postgres} 

是常用的默認值分配給變量。語法${POSTGRES_USER:=postgres}(a)將設置變量POSTGRES_USERpostgres只有在它不具有值,然後將(b)評估爲值$POSTGRES_USER。如果我們使用評論:

# ${POSTGRES_USER:=postgres} 

......沒有什麼會發生,因爲shell完全忽略了整條線。使用:意味着${...}表達式仍被評估,所以如果需要,POSTGRES_USER被分配一個值。

更新

如果沒有:在該行的開頭,那麼這個:

${POSTGRES_USER:=postgres} 

將是一個shell命令!外殼將首先評估的變量擴展,並拿出類似postgres,所以你將有一個shell腳本,有效地是這樣的:

postgres 

這可能會給你的錯誤:

bash: postgres: command not found... 
+0

但如果開始時沒有冒號,會有什麼不同? – m0meni

+0

查看我的更新,其中有一個例子。 – larsks

+0

哦,是的,我以前在忘記在env變量之前放置回聲時已經看到過。好吧,這很有意義。 – m0meni