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

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

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

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



답변

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

a=${1%.*}

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


답변

확장명을 알고 있으면 basename 을 사용할 수 있습니다

$ basename /home/jsmith/base.wiki .wiki
base


답변

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

$ s=/the/path/foo.txt
$ echo "$(b=${s##*/}; echo ${b%.*})"
foo


답변