Saya bisa menulis
VAR=$VAR1
VAR=${VAR1}
VAR="$VAR1"
VAR="${VAR1}"
hasil akhirnya bagi saya semua tampak hampir sama. Mengapa saya harus menulis satu atau yang lain? apakah ada yang tidak portabel/POSIX?
Jawaban yang Diterima:
VAR=$VAR1
adalah versi sederhana dari VAR=${VAR1}
. Ada hal-hal yang dapat dilakukan oleh yang kedua yang tidak dapat dilakukan oleh yang pertama, misalnya mereferensikan indeks array (tidak portabel) atau menghapus substring (POSIX-portabel). Lihat bagian Selengkapnya tentang variabel dari Panduan Bash untuk Pemula dan Ekspansi Parameter dalam spesifikasi POSIX.
Menggunakan tanda kutip di sekitar variabel seperti dalam rm -- "$VAR1"
atau rm -- "${VAR}"
adalah ide yang bagus. Hal ini membuat isi dari variabel unit atom. Jika nilai variabel berisi kosong (baik, karakter dalam $IFS
variabel khusus, kosong secara default) atau karakter globbing dan Anda tidak mengutipnya, maka setiap kata dipertimbangkan untuk pembuatan nama file (globbing) yang perluasannya membuat banyak argumen untuk apa pun yang Anda lakukan.
$ find .
.
./*r*
./-rf
./another
./filename
./spaced filename
./another spaced filename
./another spaced filename/x
$ var='spaced filename'
# usually, 'spaced filename' would come from the output of some command and you weren't expecting it
$ rm $var
rm: cannot remove 'spaced': No such file or directory
# oops! I just ran 'rm spaced filename'
$ var='*r*'
$ rm $var
# expands to: 'rm' '-rf' '*r*' 'another spaced filename'
$ find .
.
./another
./spaced filename
./another spaced filename
$ var='another spaced filename'
$ rm -- "$var"
$ find .
.
./another
./spaced filename
Tentang portabilitas:
Menurut POSIX.1-2008 bagian 2.6.2, kurung kurawal adalah opsional.