다음과 같은 파일이 있다고 가정해 보겠습니다.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이 설명한 방법입니다.