전체 경로에서 확장자없이 파일 이름을 추출하는 방법은 무엇입니까?


10

첫 번째 bash 스크립트를 올바르게 작성하려고하는데 어느 시점에서 파일 이름이 스크립트에로 전달됩니다 $1. 확장자없이 파일 이름을 추출해야합니다.
현재 모든 확장명이 세 글자라고 가정하고 파일 이름을 얻기 위해 마지막 4자를 제거합니다.

a="${1:0:-4}"

그러나 %~n1Windows 와 같이 3자를 초과하는 확장명으로 작업 할 수 있어야합니다 .
인수에서 확장자가없는 파일 이름을 추출하는 방법이 있습니까?


답변:


27

bash에서이를 수행하는 일반적인 방법은 매개 변수 확장을 사용하는 것입니다. bash 매뉴얼 페이지를 참조하여 "Parameter Expansion"을 검색하십시오.

a=${1%.*}

%다음 패턴 (일치하는 모든 나타내는 .*파라미터 삭제 될 최단 매치를 사용하여 발을 오른쪽) $1. 이 경우 표현식 주위에 큰 따옴표 ( ")가 필요하지 않습니다.


1
파일 패턴은 일반적으로 "Something.eng.ext"와 같습니다. 이 경우 분명히 ext는 확장이지만 $ {1 %. *}를 사용하면 "Something"부분 만 반환됩니다.
user304822

2
번호가 ${1%.*}반환됩니다 Something.eng. 첫 번째의 오른쪽에있는 모든 것을 벗겨하려면 .을 포함하여 ., 사용 ${1%%.*}반환합니다 Something.
garyjohn


0

basename 을 사용하지 않는 Bash의 한 줄짜리 :

$ s=/the/path/foo.txt
$ echo "$(b=${s##*/}; echo ${b%.*})"
foo
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.