GNU/Linux >> Belajar Linux >  >> Linux

Apa yang dilakukan '-' (tanda hubung) setelah nama variabel di sini?

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:

  1. Nilai var saat var memiliki nilai (dan bukan null).
  2. Juga nilai var (titik dua :hilang!) saat var adalah null:'' , jadi:juga nihil.
  3. Nilai setelah - (dalam hal ini, null '' ) jika var tidak disetel.

Semua itu benar-benar:

  1. Perluas ke '' ketika var tidak disetel atau null.
  2. 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"

Linux
  1. Apa yang dilakukan panggilan sistem brk()?

  2. Apa keajaiban - (tanda hubung) dalam parameter baris perintah?

  3. Apa yang dilakukan -e dalam bash shebang?

  1. Linux – Apa Arti Titik Setelah Bit Izin File?

  2. Apa perbedaan antara $(CC) dan $CC?

  3. Apa arti akhiran .d di Linux?

  1. Apa Artinya Dalam Keluaran Dari Ps?

  2. Inti dari Uniq -u Dan Apa Fungsinya??

  3. Setel +a Tidak Hapus Bendera -a?