매개변수 확장에서 문자열(예: 파일 이름)의 마지막 10자를 추출합니다.

매개변수 확장에서 문자열(예: 파일 이름)의 마지막 10자를 추출합니다.

변수에 파일 이름(확장자를 포함하지만 전체 경로 이름은 아님)이 있고 file매개변수 확장에서 기본 이름의 마지막 10자만 가져오려고 합니다.

예: file파일 이름이 포함되어 있습니다 A_text_document_1234567890.txt.

원하는 출력: 1234567890.

다음을 ${file%.*}사용하여 확장을 제거 할 수 있다는 것을 알고 있습니다 .echo ${file%.*}A_text_document_1234567890

그렇게 하면 get 을 base=${file%.*}사용할 수 있습니다 . 두 번째 변수를 사용하지 않고 매개변수 확장의 한 단계에서 이 작업을 수행할 수 있습니까?${base: -10}1234567890

내 진짜 질문은 이 두 매개변수 확장을 하나로 결합하는 방법입니다.

답변1

file=abcdefghijklm
echo ${file: -10}
defghijklm

매개변수 확장과 변형을 구별하려면 콜론 뒤에 공백이 필요합니다 ${var:-default}.


두 번째 변수를 사용합니다.

$ tmp=${file%.*}; echo "${tmp:(-10)}"
1234567890

정규 표현식을 사용하세요:

$ [[ $file =~ (.{10})(\.[^.]*)?$ ]] && echo "${BASH_REMATCH[1]}"
1234567890

관련 정보