Để xóa dấu gạch chéo nếu có, bạn có thể sử dụng cấu trúc mở rộng tham số loại bỏ hậu tố có trong tất cả các kiểu vỏ POSIX:
x=${x%/}
Có một vài biến chứng. Điều này chỉ loại bỏ một dấu gạch chéo, vì vậy nếu bạn bắt đầu a/b/c//
với một dấu gạch chéo. Hơn nữa, nếu đường dẫn ban đầu là /
, bạn cần giữ dấu gạch chéo. Đây là một giải pháp phức tạp hơn, xử lý các trường hợp này:
case $x in
*[!/]*/) x=${x%"${x##*[!/]}"};;
*[/]) x="/";;
esac
Ngoài ra, trong ksh hoặc trong bash sau shopt -s extglob
:
[[ x = *[!/] ]] || x=${x%%*(/)}
Lưu ý rằng trong nhiều trường hợp, không có dấu gạch chéo. Sẽ không có vấn đề gì nếu đối số là một liên kết tượng trưng đến một thư mục: với dấu gạch chéo, đối số chỉ định thư mục, trong khi không có dấu gạch chéo, đối số chỉ định chính liên kết tượng trưng. Nó cũng có vấn đề với một vài chương trình khác, ví dụ, đối số nguồn rsync
được xử lý khác nhau tùy thuộc vào sự hiện diện của dấu gạch chéo.
/
.