Saya cukup bingung tentang ekspresi reguler berikut yang saya temukan di skrip shell:
${0##*/}
${0%/*}
Bagaimana mereka bekerja?
Saya cukup bingung tentang ekspresi reguler berikut yang saya temukan di skrip shell:
${0##*/}
${0%/*}
Bagaimana mereka bekerja?
Jawaban:
Itu bukan ekspresi reguler, itu adalah contoh ekspansi parameter Bash: penggantian variabel atau parameter khusus berdasarkan nilainya. The Wooledge Wiki memiliki penjelasan yang bagus .
Pada dasarnya, dalam contoh yang Anda miliki, ${0##*/}
diterjemahkan sebagai:
untuk variabel $ 0, dan pola '/', dua hash rata-rata dari awal parameter, hapus kecocokan terpanjang (atau serakah) —sampai dan termasuk pola.
Jadi, di mana $0
nama file, mis. $HOME/documents/doc.txt
,, Maka parameter akan diperluas sebagai:doc.txt
Demikian pula, untuk ${0%/*}
, pola /
dicocokkan dengan akhir parameter (the %
), dengan kecocokan terpendek atau tidak serakah dihapus - yang dalam contoh di atas akan memberi Anda $HOME/documents
.
Lihat juga artikel di Wiki Bash Hacker .
*
) menunjukkan bahwa semuanya hingga dan termasuk pola akan dihapus. Oleh karena itu, untuk awal parameter,, #
ada di sebelah kiri dan di ujung %
, bekerja sebaliknya dari kanan.
sh
.
basename
dandirname
? : D