Answers:
您不能在bash中嵌套扩展(也不能在zsh之外的ksh,ash和其他shell中嵌套扩展)。这只是一个外观上的限制,因为正如您所说明的,您可以将中间表达式分配给临时变量。对于单行代码来说,这有点烦人,但是在脚本中,它的可读性可以说更好。
您可以避免使用外部实用程序,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
我猜这两条线不是可互换的,那肯定是需要的。