Tolong jelaskan mengapa 1 4 5 6 ditampilkan untuk empat pernyataan gema terakhir? Saya pernah mengalami hal ini secara tidak sengaja, tetapi saya sekarang penasaran mengapa perilaku ini terjadi.
Pernyataan ini berfungsi seperti yang diharapkan (untuk saya).
$ echo [ 9876543210 ]
[ 9876543210 ]
$ echo [237890]
[237890]
Pernyataan gema ini secara konsisten menampilkan 1 4 5 6. Apakah ada sesuatu yang istimewa tentang angka-angka ini?
$ echo [9876543210]
1 4 5 6
$ echo [abcd9876543210ghi]
1 4 5 6
$ echo [-123456-]
1 4 5 6
$ echo [-7654321-]
1 4 5 6
Terima kasih!
- Kemungkinan duplikat terkait dan bermanfaat, tetapi bukan duplikat. Duplikat yang mungkin adalah dari perspektif
rm
perintah. Pertanyaan ini dari sudut pandang "perilaku aneh" yang dirasakan dari suatuecho
perintah. Jawaban yang mendasari untuk keduanya adalah globbing. Seseorang yang mencari masalah denganecho
perintah tidak akan dengan mudah menemukanrm
pertanyaan, tetapi akan lebih cenderung mendarat di sini.
1
4
5
and6
nullglob
, contoh kedua Anda (echo [237890]
) sebenarnya tidak akan mencetak apa-apa, yang bisa menjadi petunjuk bahwa Anda melihat ekspansi global dalam contoh lainnya.Jawaban:
Braket terbuka
[
adalah karakter khusus untuk shell; itu membuka algoritma pencocokan pola yang mengatakan "cocok dengan salah satu karakter di dalam tanda kurung". Karena Anda memiliki 4 file bernama: 1, 4, 5, dan 6 di direktori Anda saat ini, ketika karakter di dalam tanda kurung berisi salah satu dari angka-angka itu, shell Anda mengganti pola-cocok dengan nama file tersebut. Bila Anda bukan menggunakanecho [ 9876543210 ]
Anda panggil gema dengan 3 parameter:[
,9876543210
, dan]
.Anda harus mengutip parameter pernyataan gema Anda untuk mencegah shell melihatnya sebagai permintaan pencocokan pola.
(atau hapus file bernama 1, 4, 5, dan 6 - tapi itu solusi untuk menunjukkan perilaku, bukan perbaikan).
sumber
echo [ 987 ]
panggilanecho
dengan tiga parameter daripada menyebutkantest
?echo
ditafsirkan berbeda denganbash
bergantung pada apakah ada ruang antara tanda kurung siku dan apa yang ada di dalamnya.[123]
vs.[ 123 ]
.