Biến Bash $ {0 ## * /}


8

Tôi đang cố gắng để hiểu biến ${0##*/}mà tôi gặp trong một tập lệnh bash.

Tôi hiểu rằng $0có chứa tên hoặc đường dẫn của tập lệnh, sau đó ##hoạt động như trong ${parameter##pattern}( nguồn ).

Nhưng tôi không hiểu những gì /đang làm ở đây. Tôi chỉ biết cú pháp cú pháp này với hai dấu gạch chéo:${parameter/pat/string}

Khi tôi lặp lại biến này trong bash, tôi nhận được bash:)

Cuối cùng, tôi không có quyền chia sẻ kịch bản. Hãy để tôi nói rằng biến được gọi SOFT="${0##*/}"và được sử dụng trong một printfcâu lệnh"Error message sent by $SOFT"

Câu trả lời:


12

Điều này cắt giảm tất cả các yếu tố đường dẫn trước, giống như basename $0sẽ làm. Các ##nỗ lực tìm kiếm sự mở rộng phù hợp dài nhất của mẫu tiền tố:

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

Từ trang người đàn ông:

${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.  

Lý do sử dụng ${0##*/}là nó không liên quan đến một cuộc gọi chương trình bên ngoài, nhưng nó che khuất những gì đang diễn ra.


Chỉ tò mò, làm thế nào bạn có được trang người đàn ông cho điều này?
Cú đấm tâm lý

Bạn đã thử man bashvà sau đó tìm kiếm parameter##?
Anthon

Vâng, tôi đã làm man bashnhưng ngớ ngẩn với tôi, tôi đã tìm kiếm để ${không tìm thấy kết quả phù hợp. Cảm ơn.
Cú đấm tâm lý
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.