내 추천은 사용하는 것 basename
입니다.
우분투에서는 기본적으로 시각적으로 간단한 코드이며 대부분의 경우를 처리합니다.
다음은 공백과 멀티 도트 / 하위 확장을 다루는 몇 가지 하위 사례입니다.
pathfile="../space fld/space -file.tar.gz"
echo ${pathfile//+(*\/|.*)}
일반적으로 first .
에서 확장을 제거 하지만 ..
경로 에서 실패 합니다.
echo **"$(basename "${pathfile%.*}")"**
space -file.tar # I believe we needed exatly that
중요한 참고 사항은 다음과 같습니다.
공백을 처리하기 위해 큰 따옴표 안에 큰 따옴표를 사용했습니다. 작은 문자는 $ 문자로 인해 전달되지 않습니다. 배쉬는 드물고 확장으로 인해 "두 번째"첫 번째 "따옴표"를 읽습니다.
그러나 여전히 생각해야합니다. .hidden_files
hidden="~/.bashrc"
echo "$(basename "${hidden%.*}")" # will produce "~" !!!
예상되는 ""결과가 아닙니다. 그것을 사용 $HOME
하거나 /home/user_path/
다시하기 때문에 배쉬는 "비정상적"이고 "~"를 확장하지 마십시오 (bash BashPitfalls bash)
hidden2="$HOME/.bashrc" ; echo '$(basename "${pathfile%.*}")'
basename $filename .exe
같은 일을 할 것입니다. 그것은 당신이 항상 어떤 확장을 제거하고 싶은지 알고 있다고 가정합니다.