user1371264 Asked: 2018-04-25 05:57:15 +0800 CST2018-04-25 05:57:15 +0800 CST 2018-04-25 05:57:15 +0800 CST 我可以在脚本中使用带有变量的 bash 历史修饰符吗? 772 如果我可以在脚本中使用 bash 历史修饰符会很方便,例如: !$:h获取文件的路径。 有没有办法在脚本中使用它们?例如${1:h} bash history-expansion 1 个回答 Voted Best Answer Stéphane Chazelas 2018-04-25T06:37:39+08:002018-04-25T06:37:39+08:00 这些历史修饰符也可以应用于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/orfoo或/。
这些历史修饰符也可以应用于
csh
特征来源的变量。但
bash
选择不复制那部分。zsh
虽然做了。所以你可以使用zsh
而不是在bash
这里:(选择显示
zsh
实际改进的示例csh
会返回foo/bar
;它还支持很多额外的有用修饰符)。在其他 shell 中,您始终可以使用
dirname
:(但请注意,它不适用于以换行符结尾的目录名称)。
在
bash
中,就像在其他 POSIX shell 中一样,您可以使用${file%/*}
,但它在一些极端情况下会产生意想不到的结果,例如foo/bar/
orfoo
或/
。