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

时间:2018-10-28 14:11:38

标签: zsh filepath glob

我想获取不存在文件的路径的目录部分。使用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

1 个答案:

答案 0 :(得分:0)

该修饰符应用于文件名生成,但也可以应用于参数扩展。

$ 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