Частенько требуется в bash скрипте указать значение переменной по умолчанию, например если не задано прямо.. Однако не все так просто... Краткий списочек с описанием логики.
# bash one liner
# --------------
x="foo" && echo "${x:-bar} (x = $x)"
# foo (x = foo)
x="" && echo "${x:-bar} (x = $x)"
# bar (x = )
unset x && echo "${x:-bar} (x = $x)"
# bar (x = )
x="foo" && echo "${x-bar} (x = $x)"
# foo (x = foo)
x="" && echo "${x-bar} (x = $x)"
# (x = )
unset x && echo "${x-bar} (x = $x)"
# bar (x = )
x="foo" && echo "${x:=bar} (x = $x)"
# foo (x = foo)
x="" && echo "${x:=bar} (x = $x)"
# bar (x = bar)
unset x && echo "${x:=bar} (x = $x)"
# bar (x = bar)
x="foo" && echo "${x=bar} (x = $x)"
# foo (x = foo)
x="" && echo "${x=bar} (x = $x)"
# (x = )
unset x && echo "${x=bar} (x = $x)"
# bar (x = bar)
x="foo" && echo "(x = $x)" && echo "${x:?error message}"
# (x = foo) foo
x="" && echo "(x = $x)" && echo "${x:?error message}"
# (x = ) bash: x: error message
unset x && echo "(x = $x)" && echo "${x:?error message}"
# (x = ) bash: x: error message
x="foo" && echo "${x:+bar} (x = $x)"
# bar (x = foo)
x="" && echo "${x:+bar} (x = $x)"
# (x = )
unset x && echo "${x:+bar} (x = $x)"
# (x = )
Опубликовано в gitgate