如果我可以在脚本中使用 bash 历史记录修饰符,例如:
!$:h
获取文件的路径。
有没有办法在脚本中使用它们?例如${1:h}
答案1
这些历史修饰符也可以应用于csh
特征来源的变量。
但bash
选择不复制该部分。zsh
但是确实如此。因此,您可以zsh
在bash
此处使用:
$ file=foo/bar/
$ echo $file:h # (or ${file:h})
foo
(选择这个例子是为了表明zsh
实际改进了csh
哪些内容会返回foo/bar
;它还支持很多其他有用的修饰符)。
在其他 shell 中,您始终可以使用dirname
:
$ dir=$(dirname -- "$file")
$ echo "$dir"
foo
(但请注意,对于以换行符结尾的目录名称,它无法正常工作)。
在 中bash
,就像在其他 POSIX shell 中一样,您可以使用,${file%/*}
但它在一些极端情况下会产生意想不到的结果,例如foo/bar/
或foo
或/
。