대화형 zsh 명령에 주석 추가 허용

대화형 zsh 명령에 주석 추가 허용

에 표시된 대로 zsh명령줄에 작성된 명령에 설명을 추가할 수 있도록 허용하는 것이 유용할 수 있지만bash

% echo test # test
zsh: bad pattern: #

쉘에서와 동일한 동작을 얻을 수 있는 방법이 있습니까 bash?

답변1

$ setopt interactive_comments
$ echo hello # comment
hello

기본적으로 셸은 스크립트(일반적으로 비대화형 셸)에서 셸 옵션을 활성화 zsh하지만 대화형 세션을 실행할 때는 활성화하지 않습니다.interactive_comments

매뉴얼의 관련 섹션 zsh:

참고
비대화형 쉘 또는 INTERACTIVE_COMMENTS옵션 세트가 있는 대화형 쉘에서 histchars 인수의 세 번째 문자(기본적으로)로 시작하는 단어는 #해당 단어와 개행 문자 앞의 모든 후속 문자가 무시되도록 합니다.

bad pattern이 쉘 옵션을 설정하지 않으면 extended_glob쉘 옵션이 설정된 경우에만 오류가 발생합니다. extended_glob설정 하면 x#0개 이상의 패턴이 일치되고 x하나 x##이상의 패턴이 일치됩니다 x(이는 정규식 수정자 *및 에 해당 +). 이는 extended_globset 및interactive_comments 설정되지 않음, 쉘은 사용자가 모르는 사이에 확장 파일 이름 와일드카드 패턴 수정자에서 사용하는 구문에 대해 불평합니다.


기본값은 histchars이며 !^#처음 두 문자는 기록 확장에 사용됩니다.

의 주석은 : zsh로 구분되므로 $histchars[3]이 문자를 변경하면 주석으로 간주되는 텍스트가 변경됩니다.

$ setopt extended_glob
$ echo hello # hello : hello
zsh: bad pattern: #
$ unsetopt extended_glob
$ echo hello # hello : hello
hello # hello : hello
$ setopt interactive_comments
$ echo hello # hello : hello
hello
$ histchars[3]=:
$ echo hello # hello : hello
hello # hello

흥미롭게도(?) bash쉘에도 interactive_comments쉘 옵션이 있지만 대화형 쉘에서는 이 옵션이 기본적으로 켜져 있습니다.

$ echo hello # hello
hello
$ shopt -u interactive_comments
$ echo hello # hello
hello # hello

관련 정보