Tôi gặp phải một số git commit để xóa một số lệnh readlink
và dirname
bằng phép thay thế ma thuật này cd ${0%/*}
.
Bash diễn giải nó như thế nào?
Tôi gặp phải một số git commit để xóa một số lệnh readlink
và dirname
bằng phép thay thế ma thuật này cd ${0%/*}
.
Bash diễn giải nó như thế nào?
%
đây được gọi là toán tử khớp mẫu.
Một trích dẫn từ Học các Bash Shell cuốn sách:
Việc sử dụng cổ điển cho các nhà khai thác mô hình khớp là trong tước thành phần của tên đường dẫn, chẳng hạn như tiền tố và hậu tố thư mục tên tập tin. Với ý nghĩ đó, đây là một ví dụ cho thấy tất cả các toán tử hoạt động như thế nào. Giả sử rằng biến số path
có giá trị /home/cam/book/long.file.name
; sau đó:
Expression Result
${path##/*/} long.file.name
${path#/*/} cam/book/long.file.name
$path /home/cam/book/long.file.name
${path%.*} /home/cam/book/long.file
${path%%.*} /home/cam/book/long
Đây có thể là khó nhớ, vì vậy đây là một thiết bị ghi nhớ tiện dụng:
Trong trường hợp cụ thể của bạn, 0
là đối tác của path
trong ví dụ của tôi, vì vậy bạn nên biết điều đó.
Nếu $0
là /home/chj/myfile.txt
, cd ${0%/*}
sẽ mở rộng thành cd /home/chj
, tức là tước phần "tệp".
Tôi hiểu sự thôi thúc của bạn khi đặt câu hỏi này, bởi vì quá khó để tìm kiếm câu trả lời mà không mất vài giờ để tìm kiếm một cuốn sách Bash.
Lệnh cd ${0%/*}
thay đổi thư mục thành thư mục chứa tập lệnh, giả sử rằng $0
được đặt thành đường dẫn đầy đủ của tập lệnh.
https://stackoverflow.com/questions/22401091/bash-variable-substitution-vs-dirname-and-basename –
http://www.gnu.org/software/bash/manual/bashref.html#Shell -Thông số-Mở rộng –
Tiếp diễn, http://stackoverflow.com/questions/4685615/search-engine-for-special-characters không hữu ích ở đây. Tôi chắc chắn có những bản sao trên StackOverflow nhưng tôi không thể tìm thấy chúng. – tripleee