Ustawienie zmiennej powłoki w zerowy sposób łączący

20

Naprawdę lubię „zerowanie koalescencyjne”, w którym można ustawić zmienną na pierwszą wartość „inną niż null” na liście rzeczy. Obsługuje to wiele języków, na przykład:

DO#:

String myStr = string1 ?? string2 ?? "default";

JavaScript:

var myStr = string1 || string2 || "default";

...itp. Jestem tylko ciekawy, czy można to zrobić w Bash, aby ustawić zmienną?

rzekomy:

MY_STR=$ENV{VAR_NAME}??$ANOTHER_VAR??"default";
devios1
źródło

Odpowiedzi:

29

Odpowiednikiem powłoki POSIX (tak obejmuje bash) jest:

${FOO:-${BAR:-default}}

Zobacz także:

${FOO-${BAR-default}}

wariant, który sprawdza, czy zmienna jest ustawiona, czy nie zamiast tego, czy tłumaczy na pusty ciąg znaków, czy nie (co robi różnicę w przypadkach, gdy zmienna jest ustawiona, ale pusta).

Stéphane Chazelas
źródło
5

Nie bezpośrednio.

my_str="${var_name:-${another_var:-default}}"
Ignacio Vazquez-Abrams
źródło