Wpis z mikrobloga

#linux #bsd #bash #sh Jak prawidłowo sprawdzić, czy zmienna jest zdefiniowana?

[ -n "${zmienna-}" ]
Użycie znaku minusa sprawia, że skrypt poprawnie działa z pożyteczną flagą -u, ponieważ jest to składnia, która automatycznie podkłada alternatywą wartość bez nadpisywania zmiennej. Tą alternatywną wartością w przypadku niezdefiniowania zmiennej jest pusty string.

Co pewien czas będę wrzucać jakieś ciekawostki 😇
  • 8
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach

@psiversum: imho lepiej ustawić sobie komendy na początku skryptu set -eu i ew pipefail - ładnie wyjaśnione z przykładami tu https://gist.github.com/mohanpedala/1e2ff5661761d3abd0385e8223e16425 - ale co kto lubi. Różnych powłok przecież też sporo, nie każdy musi chcieć zostawać przy domyślnym bashu.

Ogólnie zauważyłem że z bashem jest podobnie jak z makefile - jeśli skrypt zaczyna tyć powyżej N linii, lub robi się zbyt skomplikowany, to znak że lepiej się nada do tego
  • Odpowiedz
  • 0
imho lepiej ustawić sobie komendy na początku skryptu set -eu


@Oo-oO: No właśnie o to chodzi, że zmienna nie zawsze musi być zdefiniowana. Chociażby możesz chcieć sprawdzić zmienną środowiskową, która może być, ale nie musi być ustawiona. W takiej sytuacji -eu wywala skrypt, a ja, jako, że lubię perwersję w programowaniu to pokazałem, jak sprawdzić istnienie zmiennej, w sposób właśnie poprawny również dla skryptu na flagach -eu.
  • Odpowiedz
Już wolę declare -p foo działa nawet jak zmienna został choćby zdefiniowane a nie zadeklarowane 😏 albo declare -Fp foo do sprawdzania czy funkcje są zdefiniowane.
  • Odpowiedz
@psiversum ja zazwyczaj wysyłam jakąś wiadomość z błędem

sh
[ -z "$imie" ] && echo "missing imię" && exit 1
[ -z "$nazwisko" ] && echo "missing surname" && exit 1
[ -z "$wiek" ] && echo "missing wiek" && exit
  • Odpowiedz