bash 기능 : 파일 이름과 확장자 분리

bash 기능 : 파일 이름과 확장자 분리

split내 .bash_profile 파일에는 다음 기능이 있습니다 .

function split {
   name="${$1%.*}"
   ext="${$1##*.}"
   echo filename=$name extension=$ext
}

이제 나는 그 명령이 split foo.bar나에게 주어질 것이라고 기대해야 합니다.

filename=foo  extension=bar

하지만 오류 메시지가 나타납니다 -bash: ${$1%.*}: bad substitution. 그러나 .bash_profile $x대신에 쉘 스크립트의 일반적인 쉘 변수에 대해서도 동일하게 작동합니다 $1(.bashrc에서도 마찬가지라고 생각합니다).

무엇이 문제이고 해결 방법이 있나요?

답변1

매개변수 확장 내에 $앞의 변수 이름( )을 삭제합니다 .1

name="${1%.*}"
ext="${1##*.}"

$이미 시작 중괄호가 있는 변수를 참조하고 있으므로 {변수 이름 앞에 다른 중괄호가 필요하지 않습니다.

답변2

dirname및 명령이 있는 경우 이 함수 정의를 고려해 볼 수 있습니다 basename.awk

function split {

DIR=$(/bin/dirname "$1")
BASE=$(/bin/basename "$1")
EXT=$(echo "$BASE" | /usr/bin/awk -F. 'NF>1 {print $NF}')
NAME=${BASE%.$EXT}
echo directory=$DIR filename=$NAME extension=$EXT

}

split good.bye/data.txt
split good.bye/data
split data.txt
split good.bye/data.001.txt
split "good bye/data 001.txt"

관련 정보