2016-05-05 10 views

Antwort

4

Siehe the spec:

$ myvar= 
$ echo "${myvar:-default}" 
default 
$ echo "${myvar-default}" 

$ unset myvar 
$ echo "${myvar-default}" 
default 

Mit dem Doppelpunkt, der Scheck für "wenn nicht gesetzt oder null, Verwendung default". Ohne den Doppelpunkt ist es nur "wenn nicht gesetzt, benutze Standard".

Der entsprechende Absatz (Hervorhebung von dir):

In den Parametererweiterungen zuvor gezeigt, die Verwendung der in das Format in einem Test für einen Parameter zur Folge haben wird, die nicht gesetzt oder null ist; Das Weglassen des Ergebnisses führt zu einem Test für einen Parameter , der nur nicht gesetzt ist.

Das gleiche gilt übrigens für Bash. Zitiert aus den manual:

Wenn keine Teilzeichenerweiterung durchgeführt wird, unter Verwendung der beschriebenen Form unten (z.B. :-), Bash Tests für einen Parameter, die nicht gesetzt oder null ist. Das Weglassen des Doppelpunkts führt zu einem Test nur für einen Parameter, der nicht festgelegt ist. Anders gesagt, wenn der Doppelpunkt enthalten ist, testet der Bediener für beide Parameter Existenz und dass sein Wert ist nicht null; Wenn der Doppelpunkt weggelassen wird, testet der Operator nur auf Existenz.