Tanda kurung tunggal dalam penugasan variabel bash


11

Saya bertanya-tanya tentang tanda kurung tunggal di bash. Saya tahu bahwa mereka digunakan untuk mengeksekusi perintah dalam subkulit dan bahwa mereka digunakan untuk membuat array, tetapi apakah mereka digunakan untuk hal lain?

Satu hal yang menarik perhatian saya adalah bahwa ketika Anda menggunakan tugas variabel, seperti

var=(hello)
echo $var    # hello

bash tidak menghasilkan kesalahan atau apa pun, dan hasilnya sama seperti jika

var=hello

Apakah kedua definisi variabel ini sama atau ada perbedaan?

Jawaban:


14

Dalam kasus Anda tanda kurung ()digunakan sebagai definisi array, misalnya

a=(one two three)   # array definition
echo "${a}"         # print first element of array a
echo "${a[0]}"      # print first element of array a
echo "${a[1]}"      # print *second* element of array a
echo "${#a[@]}"     # print number of elements in array a

Jika Anda meletakkan variabel tunggal dalam array maka Anda hanya memiliki sebuah array dengan elemen tunggal.


Untuk menjawab pertanyaan Anda yang lain apakah tanda kurung juga digunakan untuk hal lain: ada banyak situasi bashyang dikombinasikan dengan karakter lain yang dapat digunakan sebagai:

  • substitusi perintah: $()
  • substitusi proses: <()dan>()
  • subkulit: (command)
  • evaluasi aritmatika: (())
  • definisi fungsi: fun () { echo x; }
  • daftar pola gumpal: ?(), *(), +(), @(), !()( hanya jika extglobis memungkinkan )

1
Benar, saya sebenarnya tidak memikirkan itu. Tapi begitu var=(1 2 3); echo $varjuga sama var=(1 2 3); echo ${var[0]}?
Mattias

Ya, hasilnya bashsama.
jimmij

Apakah kita perlu ""di echo "${a}"?
nn0p

@ nn0p Ya kami lakukan, jika kami tidak ingin melakukan operasi split dan glob on a. Pertimbangkan misalnya a=*, lalu coba echo $adan echo "$a".
jimmij
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.