Apakah perilaku .*
untuk dimasukkan .
dan ..
didefinisikan dalam LSB atau POSIX atau spesifikasi lainnya?
Mengutip dari spesifikasi Single Unix versi 2, volume ”Commands & Utilities", §2.13.3 :
Jika nama file dimulai dengan titik (
.
) periode harus dicocokkan secara eksplisit dengan menggunakan titik sebagai karakter pertama dari pola atau segera mengikuti karakter garis miring. (...) Tidak ditentukan apakah periode eksplisit dalam daftar pencocokan ekspresi braket, seperti[.abc]
dapat mencocokkan periode terkemuka dalam nama file.
Tidak ada pengecualian yang akan membuat periode kedua masuk ..
, atau string kosong mengikuti satu-satunya periode masuk .
, tidak cocok dengan wildcard .*
. Oleh karena itu standar mengatakan itu .*
cocok .
dan..
, meskipun mungkin mengganggu.
Bagian di atas menjelaskan perilaku shell ( sh
perintah). Bagian glob
fungsi pustaka C merujuk pada bagian ini.
Bahasanya persis sama dalam versi 3 , juga dikenal sebagai POSIX: 2001 dan IEEE 1003.1-2001, yang merupakan apa yang paling banyak diimplementasikan oleh sistem saat ini.
Dash, bash, dan ksh93 mematuhi POSIX. Pdksh dan zsh (bahkan di bawah emulate sh
) tidak.
Di ksh, Anda dapat membuat .*
lompatan .
dan ..
dengan pengaturan FIGNORE='.?(.)'
, tetapi ini memiliki efek samping dari pembuatan *
file titik sertakan. Atau Anda dapat mengatur FIGNORE='.*'
, tetapi kemudian .*
tidak cocok dengan apa pun.
Dalam bash, Anda dapat membuat .*
lompatan .
dan ..
dengan pengaturan GLOBIGNORE='.:..'
, tetapi ini memiliki efek samping dari pembuatan *
file titik sertakan. Atau Anda dapat mengatur GLOBIGNORE='.*'
, tetapi kemudian .*
tidak cocok dengan apa pun.
bash
tidak selalu mematuhi POSIX. hanya ketika dipanggil sebagaish
.Mungkin maksud Anda fungsionalitas dalam perluasan bash tentang globignore. Secara default pencocokan ekspansi bash. dan .. tetapi membaca pria itu:
Anda dapat mengatur variabel
GLOBIGNORE=.:..
sehingga ketika Anda mengetikkan sesuatu seperti ini:Anda hanya menghapus direktori saat ini. Standar POSIX hanya menentukan itu. adalah direktori saat ini dan .. di induk dari direktori saat ini. Arti khusus. * Ditafsirkan oleh bash atau shell lain (atau program seperti grep).
sumber
The Linux man-halaman referensi POSIX.2, 3.13.
sumber
man
,man glob
atau halaman manual harus ada? Saya tidak dapat menemukan pria di sini (yang mengejutkan saya).Sejauh yang saya tahu, LSB 4.1 tidak memerlukan
bash
dan hanyash
.Untuk
sh
itu ikuti POSIX (dengan satu ekstensi minor yang tidak relevan).sumber