Apakah ada perbedaan antara urutan {1,2,3}
dan {1..3}
?
Contohnya jika saya punya beberapa file
file.1
file.2
file.3
dan saya ingin cat
mereka bersama-sama apakah aman untuk digunakan cat file.{1..3} > file
?
Yang saya tahu adalah bahwa cat file.*>file
hal itu dapat menyebabkan masalah karena shell dapat memperluas file secara acak kadang-kadang (saya pikir ini tergantung pada inode, bukan?)
cat file.[123] >file
file.*
tidak tergantung pada inode. Itu selalu mengurutkan mereka secara leksikografis, yang dapat bergantung pada pengaturan lokasi Anda.file.{1..3}
yang berkembang ke ketiga apakah mereka ada atau tidak.cat
kesalahan denganfile.[123] not found
atau sesuatu yang sangat berguna.Jawaban:
{1..3}
dan{1,2,3}
menghasilkan hasil yang sama, tetapi dengan cara yang berbeda.Secara umum,
{n1..n2}
(yang datang pertama darizsh
,bash
danksh
menyalinnya nanti) di manan1
dann2
bilangan bulat menghasilkan semua angka antaran1
dann2
. Sambil{x,y,z}
menghasilkan tiga karakterx
,y
danz
.Dalam kasus Anda, Anda aman digunakan
cat file.{1..3} > file
Sekarang, dalam kasus
cat file.*>file
, Anda menggunakan shell globbing , yang menghasilkan semua nama file dimulai denganfile.
dan hasilnya akan diurutkan berdasarkan urutan susunan di lokal saat ini.Anda masih aman, tetapi tidak lagi ketika Anda memiliki lebih dari 10 file.
{1..10}
akan memberimu1 2 3 4 5 6 7 8 9 10
. Saat dengan globbing, Anda akan mendapatkannya1 10 2 3 4 5 6 7 8 9
sumber
Perbedaannya adalah bahwa yang satu adalah daftar dan yang lainnya adalah urutan.
{1,2,3}
mengembang untuk tiga elemen tertentu,1
,2
, dan3
.{1..3}
memperluas ke daftar nomor antara satu dan tiga. Dalam kasus khusus ini, keduanya sama dan Anda dapat menggunakan salah satu dari keduanya.file.*
akan diperluas ke semua file dan direktori di direktori saat ini yang namanya dimulai denganfile.
. Jika Anda hanya memilikifile.1
,file.2
danfile.3
kemudian itu juga setara dengan dua lainnya.Adapun masalah yang menyebabkannya, saya tidak mengerti mengapa. Anda mungkin berpikir
Namun, itu adalah masalah yang sama sekali berbeda. Satu-satunya masalah lain yang bisa saya pikirkan adalah bahwa shell Anda mungkin tidak mencantumkan file dalam urutan yang benar. Sebagai contoh:
Untuk mengatasinya, Anda dapat menggunakan
zsh
alih-alihbash
(lihat di sini untuk detail):Secara umum, ketiga pendekatan itu tidak sama. Itu tergantung pada apa yang ingin Anda lakukan. Dalam kasus di mana ketiganya mengembalikan output yang sama, ya, Anda dapat menggunakan salah satu dari mereka. Tidak ada bedanya. Semua ekspansi ini dilakukan oleh shell dan terjadi sebelum mereka diteruskan ke perintah apa pun yang menggunakannya.
sumber
*
jika saya memiliki lebih dari 10 file, jika saya bergantung pada urutan yang benar?ARG_MAX
file tetapi itu akan menjadi cara, cara lebih dari 10.cat *
tidak didefinisikan dengan baik. Outputnya tergantung pada shell dan lingkungannya. Lihat komentar Sebastian ..txt
menyelesaikan masalah denganfile.*
?Mereka sama, tetapi itu tergantung pada versi bash yang telah Anda instal jika tersedia.
Dari halaman ini :
sumber