zsh:从命令行打印文字

zsh:从命令行打印文字

我想打印一些文字文本,包括诸如;和之类的内容#

在 中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

可以通过使用$historyINTERACTIVE_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
该关联数组将历史事件编号映射到完整的历史记录行。
...

--zshmodules(1):zsh/历史、zsh 模块

--

INTERACTIVE_COMMENTS( -k)
即使在交互式 shell 中也允许评论。

--zshoptions(1):输入/输出,选项

--

注释:
在非交互式 shell 中,或在具有INTERACTIVE_COMMENTS选项集的交互式 shell 中,以 histchars 参数的第三个字符(默认为“#”)开头的单词会导致该单词以及换行符之前的所有后续字符被忽略。

--zshmisc(1):注释、Shell 语法

--

%h
%! 当前历史事件编号。

--zshmisc(1):Shell 状态、简单提示转义、提示扩展

相关内容