Poszukuje poprawnej składni, która wygląda na zmienną bash i określa, czy jest ona pusta, jeśli jest to następnie ... w przeciwnym razie kontynuuj.Bash Jeśli instrukcja null
Może coś if [ $lastUpdated = null?; then... else...
Poszukuje poprawnej składni, która wygląda na zmienną bash i określa, czy jest ona pusta, jeśli jest to następnie ... w przeciwnym razie kontynuuj.Bash Jeśli instrukcja null
Może coś if [ $lastUpdated = null?; then... else...
prostu przetestować, czy zmienna jest pusta:
if [ -z "$lastUpdated" ]; then
# not set
fi
Istnieje różnica między zmienną o wartości pustej (przypisaną pustym ciągiem) a zmienną nieustaloną; ta odpowiedź nie wykrywa tego rozróżnienia. – chepner
@chepner Czy istnieje? Proszę rozwinąć to. – trojanfoe
Przed przypisaniem zmienna jest rozbrajana. 'FOO =' (brak wartości) jest równoważne z 'FOO =" "', które ustawia wartość 'FOO' na pusty łańcuch. Różne rozszerzenia parametrów ('$ {FOO: -default}' vs '$ {FOO-default}', jako przykład) pozwalają ci na to rozróżnienie. Cytowane rozszerzenie zmiennej unset, takiej jak używasz, rozwija się do pustego łańcucha, więc '-z' nie może odróżnić dwóch stanów. – chepner
Rozszerzając komentarzach @ chepner jest, oto jak można przetestować dla rozbrojony (w przeciwieństwie do ustawiony na możliwie pusty wartość) zmienna:
if [ -z "${lastUpdated+set}" ]; then
Składnia ${variable+word}
daje pusty ciąg jeśli $variable
jest wyłączony, a string „słowo”, jeżeli jest on ustawiony:
$ fullvar=somestring
$ emptyvar=
$ echo "<${fullvar+set}>"
<set>
$ echo "<${emptyvar+set}>"
<set>
$ echo "<${unsetvar+set}>"
<>
Możesz bezpiecznie pominąć cudzysłowy w wyrażeniu, czyniąc je 'if [-z $ {lastUpdated + set}];'.[To odpowiedź SO] (https://stackoverflow.com/questions/3601515/how-to-check-if-a-variable-is-set-in-bash) zawiera szczegółowe wyjaśnienie. – panepeter
@panepeter Prawda, ale z mojego doświadczenia wynika, że łatwiej i bezpieczniej jest tylko cytować zmienne referencje niż wyczytać, kiedy można je bezpiecznie opuścić. W tym przypadku fakt, że * wymaga * szczegółowego wyjaśnienia (w tym zrozumienia, co '[-z]' robi i dlaczego) mans znacznie łatwiej użyć podwójnych cudzysłowów. Innymi słowy: jeśli ktoś myśli "[-z $ {lastUpdated + set}]" jest dobrym sposobem na przetestowanie zmiennej set, prawdopodobnie będą oni wnioskować, że '[-n $ {lastUpdated + set}] 'to dobry sposób na testowanie zmiennej unset, ale całkowicie zawiedzie. –
Podsumowując to wszystko: Nie ma prawdziwego zerowy wartość w bash. Komentarz Chepner jest na temat:
Dokumentacja bash używa null jako synonimu pustego łańcucha.
Dlatego sprawdzanie wartości null oznaczałoby sprawdzanie dla pusty ciąg:
if [ "${lastUpdated}" = "" ]; then
# $lastUpdated is an empty string
fi
Jeśli to, co naprawdę chcesz zrobić, to sprawdzić za rozbrojony lub pusty (tj „”, czyli podejście 'null' zmiennej), użyj trojanfoe za:
if [ -z "$lastUpdated" ]; then
# $lastUpdated could be "" or not set at all
fi
Jeśli chcesz sprawdź pogoda zmienna jest ustawiona, ale są w porządku z pustych strun, odpowiedź Gordona Davisson jest do zrobienia:
if [ -z ${lastUpdated+set} ]; then
# $lastUpdated is not set
fi
(Parameter Expansion to, co się dzieje tutaj)
'-eq' służy do porównywania liczb całkowitych; aby porównać łańcuchy, potrzebujesz '='. –
Nie ma „null” wartość w bash. Łańcuchy mogą być puste lub rozbrojone; jak ustawić wartość '$ lastUpdated'? –
Co masz na myśli przez 'null'? – zoska
W niektórych kontekstach mogą być odpowiednie oznaczenia takie jak '$ {lastUpdated: = never}' lub '$ {lastUpdated: -never}' i tak dalej. Zajrzyj pod [Rozbudowywanie parametrów] (http://www.gnu.org/software/bash/manual/bash.html#Shell-Parameter- Exxpansion). –