Dalam keadaan normal, ${FOO-}
berperilaku persis sama dengan ${FOO}
.
Namun, dengan set -u
, perluasan variabel yang tidak disetel menjadi kesalahan secara default.
Jadi ${FOO}
bisa jadi error, tapi ${FOO-}
tidak akan pernah.
Variabel di dalam ${...}
disebut « Ekspansi Parameter ».
Cari istilah itu di manual online, atau manual sebenarnya (baris 792).
${var-}
form mirip dengan ${var:-}
. Perbedaannya dijelaskan hanya satu baris sebelum :-
ekspansi (baris 810):
... tes bash untuk parameter yang tidak disetel atau nol. Menghilangkan hasil titik dua dalam pengujian hanya untuk parameter yang tidak disetel.
Jadi, formulir ini hanya menguji bila variabel tidak disetel (dan bukan null), dan menggantikan seluruh ekspansi ${...}
untuk nilai setelah -
, yang dalam hal ini adalah null .
Oleh karena itu, ${var-}
menjadi:
- Nilai var saat var memiliki nilai (dan bukan null).
- Juga nilai var (titik dua :hilang!) saat var adalah null:
''
, jadi:juga nihil. - Nilai setelah - (dalam hal ini, null
''
) jika var tidak disetel.
Semua itu benar-benar:
- Perluas ke
''
ketika var tidak disetel atau null. - Perluas ke nilai var (ketika var memiliki nilai).
Oleh karena itu, perluasan tidak mengubah apa pun tentang nilai var, maupun perluasannya, hanya menghindari kemungkinan kesalahan jika shell memiliki opsi nounset
atur.
Kode ini akan berhenti pada kedua penggunaan $var
:
#!/bin/bash
set -u
unset var
echo "variable $var"
[[ $var ]] && echo "var set"
Namun kode ini akan berjalan tanpa kesalahan:
#!/bin/bash
set -u
unset var
echo "variable ${var-}"
[[ ${var-} ]] && echo "var set"