Để trích xuất joebloggs
từ chuỗi này trong bash bằng cách sử dụng mở rộng tham số mà không cần bất kỳ quy trình bổ sung nào ...
MYVAR="/var/cpanel/users/joebloggs:DNS9=domain.com"
NAME=${MYVAR%:*} # retain the part before the colon
NAME=${NAME##*/} # retain the part after the last slash
echo $NAME
Không phụ thuộc vào joebloggs
việc ở một độ sâu cụ thể trong đường dẫn.
Tóm lược
Tổng quan về một số chế độ mở rộng tham số, để tham khảo ...
${MYVAR#pattern} # delete shortest match of pattern from the beginning
${MYVAR##pattern} # delete longest match of pattern from the beginning
${MYVAR%pattern} # delete shortest match of pattern from the end
${MYVAR%%pattern} # delete longest match of pattern from the end
Vì vậy, #
có nghĩa là phù hợp từ đầu (nghĩ về một dòng chú thích) và %
có nghĩa là từ cuối. Một trường hợp có nghĩa là ngắn nhất và hai trường hợp có nghĩa là dài nhất.
Bạn có thể lấy các chuỗi con dựa trên vị trí bằng cách sử dụng các số:
${MYVAR:3} # Remove the first three chars (leaving 4..end)
${MYVAR::3} # Return the first three characters
${MYVAR:3:5} # The next five characters after removing the first 3 (chars 4-9)
Bạn cũng có thể thay thế các chuỗi hoặc mẫu cụ thể bằng cách sử dụng:
${MYVAR/search/replace}
Có pattern
định dạng giống như đối sánh tên tệp, vì vậy *
(bất kỳ ký tự nào) là phổ biến, thường được theo sau bởi một ký hiệu cụ thể như /
hoặc.
Ví dụ:
Đưa ra một biến như
MYVAR="users/joebloggs/domain.com"
Xóa đường dẫn để lại tên tệp (tất cả các ký tự cho đến dấu gạch chéo):
echo ${MYVAR##*/}
domain.com
Xóa tên tệp, để lại đường dẫn (xóa kết hợp ngắn nhất sau cuối /
):
echo ${MYVAR%/*}
users/joebloggs
Chỉ lấy phần mở rộng tệp (xóa tất cả trước kỳ trước):
echo ${MYVAR##*.}
com
LƯU Ý: Để thực hiện hai thao tác, bạn không thể kết hợp chúng mà phải gán cho một biến trung gian. Vì vậy, để lấy tên tệp không có đường dẫn hoặc phần mở rộng:
NAME=${MYVAR##*/} # remove part before last slash
echo ${NAME%.*} # from the new var remove the part after the last period
domain