Istnieje wbudowany operator, który wymaga ustawienia zmiennej. Spowoduje to wyjście skryptu, jeśli tak nie jest.
tag=${1?Need a value}
Zwykle jest to używane z :
no-op blisko początku skryptu.
: ${1?Need a value}
Konflikt "niewzruszony lub pusty" jest nieco inny. Nie ma podobnej konstrukcji do wyjścia na pustą, ale ustawioną wartość, ale można łatwo użyć odpowiedniej składni ${var:-default}
, która rozwija się do $var
, jeśli jest ustawiona i niepustą, i default
w przeciwnym razie. Istnieje również ${var-default}
, który produkuje tylko default
, jeśli zmienna jest poprawnie rozbita.
Może to być szczególnie przydatne, gdy chcesz używać set -u
ale trzeba uporać się z możliwie wyłączonym zmiennej:
case ${var-} in '') echo "$0: Need a value in var" >&2; exit 1;; esac
ja nieco wolą case
nad if [ "${var-}" = '' ]
, głównie dlatego, że ratuje mnie od konieczności zawijania podwójne cytaty około ${var-}
i brzydki przypadek wartości w $var
, który zostanie zinterpretowany jako opcja do [
i wyświetli komunikat o błędzie, gdy najmniej się tego spodziewasz. (Bash, [[
nie ma tych problemów, ale ja wolę trzymać się powłoki POSIX, kiedy tylko mogę.)
http://mywiki.wooledge.org/BashGuide/TestsAndConditionals#Conditional_Blocks_.28if.2C_test_and_.5B.5B.29 –
Jeżeli zmienna składający whitespaces tylko jak to: 'var =” „' uznać pusty czy nie? –
tak, zmienna składająca się z białych znaków, uznana za pustą. zasadniczo, myślę, aby umieścić czek, jak gdyby [[! -z "$ {Tag}" && "$ {Tag}"! = '']] za to. –