답변:
bash (ksh, ash 및 zsh 이외의 다른 쉘)에는 확장을 중첩 할 수 없습니다. 설명 할 때 임시 표현식에 중간 표현식을 지정할 수 있으므로 이는 외관상의 한계입니다. 한 줄짜리 사람에게는 약간 성가 시지만 스크립트에서는 가독성이 더 좋습니다.
외부 유틸리티 basename
를 사용하지 않고 대신 문자열 조작 구문을 사용할 수 있습니다.
FILE="${1##*/}"; FILE="${FILE/%.jpeg/.jpg}"
여기서 대체 스크립트를 외부에 배치 하기 위해 스크립트를 다시 작성할 수 있습니다 . 그것은 일반적인 현상이 아니며 특정 단일 라이너 느낌 이외의 것을 얻지 못합니다.
Zsh는 더 나은지 나쁜지에 따라 확장을 중첩시킬 수 있습니다.
FILE=${$(basename $1)/%.jpeg/.jpg} # using basename
FILE=${${1##*/}/%.jpeg/.jpg} # using string rewriting
또는 다음 대신 zsh의 내장 구문을 사용할 수 있습니다 basename
.
FILE=${${1:t}/%.jpeg/.jpg}
sed
그렇습니다.