변수에 파일 이름(확장자를 포함하지만 전체 경로 이름은 아님)이 있고 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