我想打印一些文字文本,包括诸如;
和之类的内容#
。
在 中bash
,我可以使用(信用):
echo_literally_helper() {
local str; str=$(history 1)
# Remove leading space number space
echo "$str" | sed -En 's/^ *[0-9]+ +[[:graph:]]+[[:blank:]]//p'
}
alias echo-literally='echo_literally_helper #'
然后:
$ echo-literally a; b; c
a; b; c
我将如何做同样的事情zsh
?
答案1
可以通过使用$history
和INTERACTIVE_COMMENTS
:
echo_literally_helper () {
local str="$history[$(print -P %h)]"
echo "${str#*echo_literally\ }"
}
alias echo_literally='echo_literally_helper #'
# for using `$history`. (does not needed in zsh-5.5.1 here, though.)
zmodload zsh/parameter
# zsh does not enable this option by default, so turn on.
setopt interactivecomments
然后:
% echo_literally a; b; c
a; b; c
注意:它使用print -P %h
和$history
来获取当前历史命令,而不是history
(或fc
) bulitin 命令。
以下是 zsh 文档的一些参考。
history
该关联数组将历史事件编号映射到完整的历史记录行。
...
--
INTERACTIVE_COMMENTS
(-k
)
即使在交互式 shell 中也允许评论。
--
注释:
在非交互式 shell 中,或在具有INTERACTIVE_COMMENTS
选项集的交互式 shell 中,以 histchars 参数的第三个字符(默认为“#”)开头的单词会导致该单词以及换行符之前的所有后续字符被忽略。
--
%h
%!
当前历史事件编号。