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"