Saya telah melihat beberapa skrip yang ditulis orang lain (khususnya Red Hat), dan banyak variabelnya ditetapkan menggunakan notasi berikutVARIABLE1="${VARIABLE1:-some_val}"
atau perluas variabel lainVARIABLE2="${VARIABLE2:-`echo $VARIABLE1`}"
Apa gunanya menggunakan notasi ini daripada hanya mendeklarasikan nilai secara langsung (mis., VARIABLE1=some_val
)?
Apakah ada manfaat dari notasi ini atau kemungkinan kesalahan yang dapat dicegah?
Apakah :-
memiliki arti khusus dalam konteks ini?
Jawaban yang Diterima:
Teknik ini memungkinkan variabel untuk diberi nilai jika variabel lain kosong atau tidak terdefinisi. CATATAN: “Variabel lain” ini bisa sama atau variabel lain.
kutipan
${parameter:-word}
If parameter is unset or null, the expansion of word is substituted.
Otherwise, the value of parameter is substituted.
CATATAN: Formulir ini juga berfungsi, ${parameter-word}
. Jika Anda ingin melihat daftar lengkap semua bentuk ekspansi parameter yang tersedia di Bash, saya sangat menyarankan Anda melihat topik ini di wiki Bash Hacker berjudul:“Ekspansi parameter“.
Contoh
variabel tidak ada
$ echo "$VAR1"
$ VAR1="${VAR1:-default value}"
$ echo "$VAR1"
default value
variabel ada
$ VAR1="has value"
$ echo "$VAR1"
has value
$ VAR1="${VAR1:-default value}"
$ echo "$VAR1"
has value
Hal yang sama dapat dilakukan dengan mengevaluasi variabel lain, atau menjalankan perintah dalam bagian nilai default dari notasi.
$ VAR2="has another value"
$ echo "$VAR2"
has another value
$ echo "$VAR1"
$
$ VAR1="${VAR1:-$VAR2}"
$ echo "$VAR1"
has another value
Contoh Lainnya
Anda juga dapat menggunakan notasi yang sedikit berbeda yang hanya VARX=${VARX-<def. value>}
.
$ echo "${VAR1-0}"
has another value
$ echo "${VAR2-0}"
has another value
$ echo "${VAR3-0}"
0
Dalam $VAR1
di atas &$VAR2
sudah didefinisikan dengan string “memiliki nilai lain” tetapi $VAR3
tidak terdefinisi, jadi nilai default yang digunakan sebagai gantinya, .
Contoh Lain
$ VARX="${VAR3-0}"
$ echo "$VARX"
0
Memeriksa dan menetapkan menggunakan :=
notasi
Terakhir saya akan menyebutkan operator yang berguna, :=
. Ini akan melakukan pemeriksaan dan menetapkan nilai jika variabel yang diuji kosong atau tidak ditentukan.
Contoh
Perhatikan bahwa $VAR1
sekarang ditetapkan. Operator :=
melakukan tes dan tugas dalam satu operasi.
$ unset VAR1
$ echo "$VAR1"
$ echo "${VAR1:=default}"
default
$ echo "$VAR1"
default
Namun jika nilainya ditetapkan sebelumnya, maka dibiarkan saja.
$ VAR1="some value"
$ echo "${VAR1:=default}"
some value
$ echo "$VAR1"
some value
Tabel Referensi Handy Dandy
Terkait:Buat perintah dengan memasukkan string ke dalam tty?
Referensi
- Ekspansi Parameter – Bash Hacker Wiki
- 10.2. Substitusi Parameter
- Ekspansi Parameter Bash