쉘 스크립트의 파일 입력 경로에서 파일 이름 가져오기

쉘 스크립트의 파일 입력 경로에서 파일 이름 가져오기

중복 가능성:
문자열에서 파일 확장자를 제거하는 가장 좋은 방법은 무엇입니까?

다음과 같은 파일이 있다고 가정해 보겠습니다.script.sh

쉘에서 나는 다음을 입력합니다.

script.sh ../folder/file.py

그 파일에서 나는 echo $1그것이 출력될 것이라는 것을 알고 있습니다../folder/file.py

그런데 확장자 없이 파일명만 얻을 수 있는 방법이 있을까요... file?

답변1

BASH에는 많은 것이 있습니다문자열 연산자여기에서 사용하고 싶을 수도 있지만 단 하나의 명령문으로 이를 수행하는 방법을 모르므로 두 개의 명령문 또는 하위 쉘을 사용할 수 있습니다.

echo `basename ${1%.py}`

또는 보다 일반적으로,

echo `basename ${1%.*}`

또는 임시 변수를 사용하십시오.

FILE=${1##*/}
echo ${FILE%.*}

서브쉘을 사용하는 한 sed그것도 작동할 것 같아요.

echo `echo $1 | sed 's/.*\/\([^/]*\)\(\.[^./]*\)\?/\1/'`

이것은 약간 보기 흉한 표현이지만 입력에 대해 몇 가지 가정을 하면 정리할 수 있습니다.

답변2

확장자가 항상 점으로 구분되어 있고 파일 이름에 점이 없는 경우 간단한 접근 방식을 사용할 수 있습니다.

echo $(basename $1) | cut -d. -f1

그러나 가장 좋은 방법은 위에서 Kevin이 설명한 방법입니다.

관련 정보