"ls 인용문"이란 무엇입니까?

"ls 인용문"이란 무엇입니까?

오늘 우연히 눌렀는데 '명령어 ls
ls'

> ls'
quote> ls'
zsh: command not found: ls\nls
>

무슨 일인지 말해 줄 사람 있나요 ls quote?

답변1

인용문을 열고 'Enter를 눌렀으므로 쉘은 인용문을 닫을 것으로 예상합니다. 이 quote>팁은 이러한 유형을 시각적으로 표시한 것일 뿐입니다.

이를 통해 프로그램에 여러 줄의 인수를 전달할 수 있습니다.

예를 들어:

$ echo 'hi
quote> there'

hi
there

을 입력했기 때문에 이는 존재하지 않는 명령(중간에 줄 바꿈이 있는 명령)을 ls'Enterls'Enter실행하려고 시도하는 것과 동일하므로 쉘에서 오류가 발생합니다.ls\nls

답변2

이는 (일명 ) 프롬프트, 보조 프롬프트 문자열 quote>입니다 .$PS2$PROMPT2zsh

귀하의 경우 기본 프롬프트 문자열( $PS1/ $PROMPT)은 명령을 입력하도록 초대하는 문자열인 것으로 보입니다. 두 번째 명령은 명령을 계속하고 완료하도록 초대하는 명령입니다.

명령을 눌렀 Enter지만 아직 완료하지 않았을 때 나타납니다.

에서 zsh의 기본값은 이고, 여기서 는 (에 설명되어 있습니다.$PS2%_> %_프롬프트 확장/셸 상태):

%_

파서의 상태, 즉 명령줄에서 시작된 셸 구성(예: if및 ) 입니다. for정수가 주어지면 많은 문자열이 인쇄됩니다. 0 또는 음수 또는 정수가 없으면 가능한 많은 값을 인쇄한다는 의미입니다. 이는 연속된 줄을 프롬프트하고 PS2옵션을 사용하여 PS4디버깅할 때 가장 유용합니다 XTRACE. 후자의 경우 비대화식으로도 작동합니다.

예를 들어, 다음을 입력하면:

my-PS1-prompt> (while true; do for i in "${var-qwe
subsh while for dquote braceparam>

쉘은 명령이 완료되고 쉘이 실행을 시작하기 전에 ${...}중괄호 매개변수 확장, "..."큰따옴표를 끄고 forand 문을 완성하고 하위 쉘을 닫아야 한다고 알려줍니다.while

귀하의 경우 작은따옴표로 묶인 문자열을 닫아야 한다는 메시지가 표시됩니다 '...'. 이렇게 하면 해당 명령을 실행하려고 시도하지만 ls<newline>ls시스템에 명령이 없기 때문에 실패합니다.

, ( 일부 터미널에서는 + 를 입력할 수도 있음 ) 또는 + , + 를 Enter누르지 않고도 현재 줄 대신 편집 버퍼에 리터럴 개행(일명)을 입력할 수 있습니다 . 쉘에 제출하십시오. 이 경우 보조 프롬프트가 표시되지 않으며 커서를 다시 첫 번째 줄로 이동할 수 있습니다.EscapeEnterAltEnterCtrlVCtrlJ^J

$PS1및 외에도 (a.k.a. ) for 문, (a.k.a. ) 디버그 출력이 $PS2있으며 , ( ) 및 ( ) 는 화면 오른쪽에 인쇄된다는 점을 제외하면 / 와 유사합니다 .$PS3$PROMPT3select$PS4$PROMPT4xtrace$RPS1$RPROMP$RPS2$RPOMPT2$PS1$PS2

$PS1,2,3,4Korn 쉘에서, %x특수 시퀀스는 csh(by zsh)에서 나옵니다. POSIX는 다음 이외의 것을 지정합니다.PS3ksh( 의 문을 지정하지 않기 때문에 select) 그러나 %x시퀀스는 지정되지 않습니다.

tcsh이었고 영감을 $prompt받았습니다 / .$rpromptzsh$RPS1$PRS2

쉘은 /에 있는 문자와 반대이고 다르며 호환되지 않는 문자를 사용하여 특수 시퀀스에 대한 프롬프트 bash에서 다른(그리고 불행한) 구문을 선택합니다 . 구체적이다.$PSx\%tcshzsh%_zsh

관련 정보