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"