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 인수의 세 번째 문자(기본값은 "#")로 시작하는 단어는 해당 단어와 개행 문자 앞에 있는 모든 후속 문자를 초래합니다. 무시당하다.

--zshmisc(1): 주석, 쉘 구문

--

%h
%! 현재 역사적 사건 번호.

--zshmisc(1): 쉘 상태, 단순 프롬프트 탈출, 프롬프트 확장

관련 정보