Variabel Bash $ {0 ## * /}

8

Saya mencoba memahami variabel ${0##*/}yang saya temui dalam skrip bash.

Saya mengerti bahwa itu $0berisi nama, atau path, dari skrip, kemudian ##berfungsi seperti pada ${parameter##pattern}( sumber ).

Tapi saya tidak mengerti apa yang /dilakukan di sini. Saya hanya tahu sedikit sintaks dengan dua garis miring:${parameter/pat/string}

Ketika saya mengulangi variabel ini di bash, saya mengerti bash:)

Akhirnya, saya tidak memiliki otorisasi untuk membagikan skrip. Izinkan saya untuk mengatakan bahwa variabel dipanggil SOFT="${0##*/}"dan digunakan dalam printfpernyataan"Error message sent by $SOFT"

bela83
sumber

Jawaban:

12

Ini memotong semua elemen jalur sebelumnya, seperti yang basename $0akan dilakukan. The ##mencoba untuk menemukan perluasan cocok terpanjang pola awalan:

$ x=/a/b/c/d
$ echo ${x##*/}
d
$ basename $x
d

Dari halaman manual:

${parameter##word}
       Remove matching prefix pattern.  The word is expanded to produce
       a pattern just as in pathname expansion.  If the pattern matches
       the  beginning of the value of parameter, then the result of the
       expansion is the expanded value of parameter with  the  shortest
       matching  pattern  (the ``#'' case) or the longest matching pat‐
       tern (the ``##'' case) deleted.  

Alasan penggunaannya ${0##*/}adalah karena itu tidak melibatkan panggilan program eksternal, tetapi agak mengaburkan apa yang sedang terjadi.

Anthon
sumber
Hanya ingin tahu, bagaimana Anda mendapatkan halaman manual untuk ini?
Psycho Punch
Sudahkah Anda mencoba man bashdan kemudian mencari parameter##?
Anthon
Ya, saya memang melakukan man bashtetapi konyol saya, saya mencari ${sehingga gagal menemukan kecocokan. Terima kasih.
Psycho Punch