Sử dụng dirname và tên cơ sở như được đề cập bởi Michael sẽ là cách an toàn nhất để có được những gì bạn muốn.
Dù sao, nếu bạn thực sự muốn làm điều này với "bash only tools", bạn có thể sử dụng thay thế tham số:
echo `basename $PWD` # Basename of current working directory.
echo "${PWD##*/}" # Basename of current working directory.
echo
echo `basename $0` # Name of script.
echo $0 # Name of script.
echo "${0##*/}" # Name of script.
echo
filename=test.data
echo "${filename##*.}" # data
# Extension of filename.
Ví dụ này được lấy trực tiếp từ Hướng dẫn lập trình Bash nâng cao rất đáng xem.
Giải thích khá đơn giản:
$ {var # Pattern} Xóa khỏi $ var phần ngắn nhất của $ Pattern khớp với mặt trước của $ var. $ {var ## Pattern} Xóa khỏi $ var phần dài nhất của $ Pattern khớp với mặt trước của $ var.
Nhìn vào mô hình như một số regex và #
hoặc ##
như một loại sửa đổi tham lam / không tham lam.
Điều này có thể trở nên hữu ích nếu bạn sẽ phải thực hiện một số trích xuất phức tạp hơn của một phần đường dẫn.