zsh:从命令行打印文字文本

Tom*_*ale 7 zsh shell-script

我想打印一些文字文本,包括;#.

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

\n\n
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\n
Run Code Online (Sandbox Code Playgroud)\n\n

然后:

\n\n
% echo_literally a; b; c\na; b; c\n
Run Code Online (Sandbox Code Playgroud)\n\n

注意:它使用print -P %h$history来获取当前历史命令,而不是history(或fc) bulitin 命令。

\n\n
\n\n

以下是 zsh 文档的一些参考。

\n\n
\n

history
\n 此关联数组将历史事件编号映射到完整的历史记录行。
\n ...

\n\n

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

\n
\n\n

--

\n\n
\n

INTERACTIVE_COMMENTS( -k)
\n 即使在交互式 shell 中也允许注释。

\n\n

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

\n
\n\n

--

\n\n
\n

注释:
\n 在非交互式 shell 中,或在INTERACTIVE_COMMENTS设置了选项的交互式 shell 中,以 histchars 参数的第三个字符开头的单词(默认为 \xe2\x80\x98#\xe2\x80\x99)会导致该单词以及换行符之前的所有以下字符都将被忽略。

\n\n

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

\n
\n\n

--

\n\n
\n

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

\n\n

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

\n
\n