带星号的 zsh 参数扩展作为变量不起作用

zsh parameter expansion with asterisk as variable does not work

我正在尝试使用参数扩展删除文件扩展名。例如给定文件名 123.sh,return 123.

如果我将模式“.*”存储在变量中,它不起作用 —${filename%$suffix} 不起作用。

如果我从字面上指定模式,它确实是 — ${filename%.*}

我做错了什么?

在扩展 ${filename%$suffix} 中,$suffix 的值按​​字面意思 替换 。要将其替换为 模式 ,您需要使用 glob substitution${filename%$~suffix}

但是,none 对于您要执行的操作来说,这是必需的。要从文件名中删除扩展名,您可以简单地使用 r modifier:

❯ filename="123.sh"
❯ print $filename:r
123