我想打印一些文字文本,包括;和#.
在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 #'
Run Code Online (Sandbox Code Playgroud)
然后:
$ echo-literally a; b; c
a; b; c
Run Code Online (Sandbox Code Playgroud)
我将如何做同样的事情zsh?
小智 3
$history通过使用and可以实现INTERACTIVE_COMMENTS:
echo_literally_helper () {\n local str="$history[$(print -P %h)]"\n echo "${str#*echo_literally\\ }"\n}\nalias echo_literally=\'echo_literally_helper #\'\n\n# for using `$history`. (does not needed in zsh-5.5.1 here, though.)\nzmodload zsh/parameter\n\n# zsh does not enable this option by default, so turn on.\nsetopt interactivecomments\nRun Code Online (Sandbox Code Playgroud)\n\n然后:
\n\n% echo_literally a; b; c\na; b; c\nRun Code Online (Sandbox Code Playgroud)\n\n注意:它使用print -P %h和$history来获取当前历史命令,而不是history(或fc) bulitin 命令。
以下是 zsh 文档的一些参考。
\n\n\n\n\n\n\n \n
history
\n 此关联数组将历史事件编号映射到完整的历史记录行。
\n ...
--
\n\n\n\n\n\n\n \n
INTERACTIVE_COMMENTS(-k)
\n 即使在交互式 shell 中也允许注释。
--
\n\n\n\n\n注释:
\n\n \n
\n 在非交互式 shell 中,或在INTERACTIVE_COMMENTS设置了选项的交互式 shell 中,以 histchars 参数的第三个字符开头的单词(默认为 \xe2\x80\x98#\xe2\x80\x99)会导致该单词以及换行符之前的所有以下字符都将被忽略。
--
\n\n\n\n\n\n \n
%h
\n%!\n 当前历史事件编号。