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?

Mattias
sumber

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 )
jimmij
sumber
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