;
とのような文字通りのテキストを印刷したいと思います#
。
では、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
およびを使用します。$history
history
fc
以下はzshドキュメントへのいくつかの参照です。
history
この連想配列は、過去のイベント番号を完全な歴史行にマップします。
...
-
INTERACTIVE_COMMENTS
(-k
)は
対話型シェルでもコメントを受け入れます。
-
注:
非対話型シェルまたはINTERACTIVE_COMMENTS
オプションセットを持つ対話型シェルでは、histchars引数の3番目の文字(デフォルトは「#」)で始まる単語は、その単語と改行文字の前にあるすべての後続の文字を生成します。無視される。
-
%h
%!
現在の歴史的出来事番号。