我可以将 bash 历史记录修饰符与脚本中的变量一起使用吗?

我可以将 bash 历史记录修饰符与脚本中的变量一起使用吗?

如果我可以在脚本中使用 bash 历史记录修饰符,例如:

!$:h获取文件的路径。

有没有办法在脚本中使用它们?例如${1:h}

答案1

这些历史修饰符也可以应用于csh特征来源的变量。

bash选择不复制该部分。zsh但是确实如此。因此,您可以zshbash此处使用:

$ 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/

相关内容