gumpalan / split
Saya akan mengambil glob / split dulu. @ Stephane menjawab Anda terhubung dengan menggunakan istilah-istilah itu dalam pengertian umum. Itu bukan perintah aktual atau semacamnya, hanya operasi semu.
Itu split("$test")
akan membagi konten "$ test" menjadi "array" elemen.
The glob(...)
kemudian akan mengurus untuk memperluas setiap elemen ini yang mengandung shell globbing karakter seperti *
atau rentang [1-2]
.
Contoh
Katakan string kita $test
adalah sebagai berikut.
$ test="afile[1-2] afile[3-5]"
Juga katakanlah kita memiliki direktori dengan beberapa file di dalamnya.
$ ls -1
afile1
afile2
afile3
afile4
afile5
Sekarang jika kami mencoba untuk menggemakannya tanpa tanda kutip, Anda harus memperhatikan bahwa string kami terpecah pada spasi, dan kemudian setiap karakter globbing diperluas.
$ echo $test
afile1 afile2 afile3 afile4 afile5
Namun jika kita mengutip variabel ketika kita meneruskannya sebagai argumen untuk echo
kita akan mendapatkan string literal asli.
$ echo "$test"
afile[1-2] afile[3-5]
ekspansi variabel
Istilah ekspansi variabel dimaksudkan untuk mencakup operasi dasar yang dilakukan shell sebagai bagian dari operasi dasar itu. Shell bertanggung jawab atas penguraian input dan kemudian mengeksekusi input ini setelah dianggap benar secara sintaksis.
Dalam contoh kita sebelumnya. Ketika variabel $test
disajikan untuk echo
dikutip, kami memberi tahu shell untuk terus maju dan membagi argumen itu dan kemudian menggumpalnya.
Ketika dikutip, kami pada dasarnya menonaktifkan fitur itu dengan variabel apa pun yang kami bungkus dengan tanda kutip ganda.
Contoh
Berikut adalah beberapa contoh tambahan dari globbing dan splitting.
Glob / perpecahan terjadi secara otomatis
$ echo file{1..3}
file1 file2 file3
$ echo file{1..3} dir{a..b}
file1 file2 file3 dira dirb
$ echo dir{z..w} file{A..D}
dirz diry dirx dirw fileA fileB fileC fileD
$ echo dir{z..w} file{A..B} fileC
dirz diry dirx dirw fileA fileB fileC
Glob / pemisahan dinonaktifkan melalui penawaran ganda
$ echo "dir{z..w} file{A..B} fileC"
dir{z..w} file{A..B} fileC
$ echo "dir{z..w} file{A..B}"
dir{z..w} file{A..B}