Tôi khá bối rối về các biểu thức chính quy sau đây tôi tìm thấy trong tập lệnh shell:
${0##*/}
${0%/*}
Họ làm việc như thế nào?
Tôi khá bối rối về các biểu thức chính quy sau đây tôi tìm thấy trong tập lệnh shell:
${0##*/}
${0%/*}
Họ làm việc như thế nào?
Câu trả lời:
Chúng không phải là biểu thức chính quy, chúng là ví dụ về mở rộng tham số của Bash: thay thế một biến hoặc một tham số đặc biệt bằng giá trị của nó. Wiki Wooledge có một lời giải thích tốt .
Về cơ bản, trong ví dụ bạn có, ${0##*/}
dịch là:
đối với biến $ 0 và mẫu '/', hai giá trị băm có nghĩa là từ đầu tham số, xóa kết quả dài nhất (hoặc tham lam) khớp với tối đa và bao gồm cả mẫu.
Vì vậy, $0
tên của một tệp ở đâu, ví dụ $HOME/documents/doc.txt
,, sau đó, tham số sẽ được mở rộng thành:doc.txt
Tương tự, đối với ${0%/*}
, mẫu /
được khớp với cuối tham số (the %
), với kết quả khớp ngắn nhất hoặc không tham lam đã bị xóa - mà trong ví dụ trên sẽ cung cấp cho bạn $HOME/documents
.
Xem thêm bài viết trên Wiki của Bash Hacker .
*
) chỉ ra rằng mọi thứ lên đến và bao gồm cả mẫu sẽ bị xóa. Do đó, đối với phần đầu của tham số, #
nó nằm ở bên trái và phần cuối %
, hoạt động theo cách khác từ bên phải.
sh
.
basename
vàdirname
? : D