2015-09-02 36 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