Jaki jest najlepszy sposób na określenie, czy zmienna w bashu jest pusta ("")?
Słyszałem, że zalecane jest, abym wykonał if [ "x$zmienna" = "x" ]
.
Czy to jest poprawny sposób? (musi być coś bardziej prostego)
Zwróci true, jeżeli zmienna jest nieustawiona lub ustawiona na pusty łańcuch ("").
if [ -z "$VAR" ];
-z
jest najlepszym sposobem.
Inną opcją, której użyłem jest ustawienie zmiennej, ale może ona zostać zastąpiona przez inną zmienną np.
export PORT=${MY_PORT:-5432}
Jeśli zmienna $MY_PORT
jest pusta, wtedy PORT
zostaje ustawiony na 5432, w przeciwnym razie PORT zostaje ustawiony na wartość MY_PORT
. Zwróć uwagę na składnię zawierającą dwukropek i myślnik.
Jeśli jesteś zainteresowany rozróżnianiem przypadków set-empty i unset status, spójrz na opcję -u dla bash:
$ set -u
$ echo $BAR
bash: BAR: unbound variable
$ [ -z "$BAR" ] && echo true
bash: BAR: unbound variable
$ BAR=""
$ echo $BAR
$ [ -z "$BAR" ] && echo true
true