在不存在的文件路径上使用文件名生成修饰符

Using filename generation modifier on nonexistent filepath

我想获取不存在文件路径的目录部分。使用 dirname 命令不是解决方案,因为我想在可用时坚持使用 Zsh 工具。

目标是使用 mkdir 命令创建包含新文件的目录。

重点是使用文件名生成修饰符 :h 似乎对不存在的文件的路径不起作用:

$ echo ./.foo/bar/baz(:h)
zsh: not matches found: ./.foo/bar/baz(:h)

$ mkdir --parents ./.foo/bar

$ touch ./.foo/bar/baz

$ echo ./.foo/bar/baz(:)
./.foo/bar

修改器应用于文件名生成,但也可以应用于参数扩展。

$ foo=./.foo/bar/baz

$ echo $foo
./.foo/bar/baz

$ echo $foo(:h)
zsh: not matches found: ./.foo/bar/baz(:h)

这里先展开参数foo,然后修饰符触发文件名生成

为防止这种情况,请使用如下所示的语法:

$ echo ${foo:h}
./.foo/bar