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

これは次の方法で行うことができます。$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

注:bulitinコマンドではなく(または)現在の履歴コマンドを取得するためにprint -P %hおよびを使用します。$historyhistoryfc


以下はzshドキュメントへのいくつかの参照です。

history
この連想配列は、過去のイベント番号を完全な歴史行にマップします。
...

-zshmodules(1): zsh/history, zsh モジュール

-

INTERACTIVE_COMMENTS-k)は
対話型シェルでもコメントを受け入れます。

-zshoptions(1): 入力/出力、オプション

-

注:
非対話型シェルまたはINTERACTIVE_COMMENTSオプションセットを持つ対話型シェルでは、histchars引数の3番目の文字(デフォルトは「#」)で始まる単語は、その単語と改行文字の前にあるすべての後続の文字を生成します。無視される。

-zshmisc(1): コメント、シェル構文

-

%h
%! 現在の歴史的出来事番号。

-zshmisc(1): シェル状態、単純なプロンプトのエスケープ、プロンプトの拡張

関連情報