작은 따옴표를 입력 할 때 터미널이 어떤 모드로 들어가나요?


11

'터미널에 작은 따옴표 를 입력하면 다른 모드로 이동하고 명령이 실행되지 않습니다. 이 모드는 무엇이며 언제 사용합니까?

root@sai:~# '
> ls
> '
ls
: command not found
root@sai:~#

30
그리고 왜 루트로 달리고 있습니까?
Zanna

13
터미널은 이전과 같은 모드에 있습니다- 은 다른 모드에 있습니다 (다른 문자열을 완성하기를 기다리는 중 ')
ohno

답변:


26

효과적으로 쉘은 완전한 command / expression을 요청하며, 그 이유는 PS2프롬프트 문자열을 표시하는 것 입니다.

보낸 사람 man bash:

격려

대화식으로 실행할 때 bash는 명령을 읽을 준비가되면 기본 프롬프트 PS1을 표시하고 명령 을 완료하기 위해 추가 입력이 필요한 경우 보조 프롬프트 PS2를 표시합니다.

그리고 그 전에 조금 :

  PS2    The value of this parameter is  expanded
          as  with  PS1  and used as the secondary
          prompt string.  The default is ``> ''.

따라서 문서를 읽은 것처럼 짐작할 수 있듯이 셸에는 서로 다른 목적을 가진 여러 프롬프트가 있습니다. PS1프롬프트는 당신입니다 root@sai:~#당신이 명령을 입력 할 때 정상적으로 표시 문자열. >는 IS PS2프롬프트. 명령 블록과 명령 디버깅을 PS3위한 다른 것들도 있습니다 . 이 경우 더 관심이 있습니다.selectPS4set -xPS2

쉘이 PS2프롬프트를 표시하는 방법에는 여러 가지가 있으며 새 행에서 명령을 완료해야 할 수도 있습니다. here-doc리디렉션 을 수행 할 때 동일한 프롬프트가 사용 됩니다 (이 예제에서 종료 문자열이 표시되면 명령이 완료된 것으로 간주 됨 EOF).

$ cat <<EOF
> line one
> line two
> EOF
line one
line two

종종 긴 명령을 계속하면 \줄 바꿈 을 추가 하고 즉시 (!) 행을 수행 하여 동일한 프롬프트가 표시 될 수 있습니다.

$ echo Hello\
> World
HelloWorld

$ echo 'Hello\                                                                                                           
> World'
Hello\
World

파이프 라인, 논리 연산자 또는 특수 키워드가 개행 전에 명령 행에 표시되면 모든 최종 명령문을 입력 할 때까지 명령이 불완전한 것으로 간주됩니다.

$ echo Hello World | 
> wc -l
1

$ echo Hello World &&                                                                                                    
> echo "!"
Hello World
!

$ for i in $(seq 1 3); do
> echo "$i"
> done
1
2
3 

$ if [ -f /etc/passwd ]
> then
>     echo "YES"
> fi
YES

특별한 경우, 작은 따옴표는 작은 따옴표 사이의 내용에 대한 문자 적 ​​해석을 의미합니다. 따라서 Zanna가 지적했듯이 newline + ls+ newline으로 구성된 명령을 입력하고 있습니다 . 이러한 실행 파일 이름을 찾을 수 없습니다 (일반적으로 명령 파일 이름은 영숫자 문자와 밑줄, 대시 및 점으로 만 구성되어야 함). 실제로 특수 문자를 포함하는 파일 이름을 가질 수는 있지만 항상 피해야합니다.

참고 : 예제에 표시된 것과 같은 동작은 bash, dash(Ubuntu /bin/sh에서 ksh, 및 )를 포함하여 Bourne과 같은 쉘 에만 적용됩니다 mksh. csh그 파생 상품은 다음과 같은 방식으로 작동하지 않습니다.

$ tcsh                                                    
eagle:~> '
Unmatched '.
eagle:~> csh
% '
Unmatched '.
%  

그러나, 대화 형 모드로, csh여전히 올릴 ?으로 PROMPT2 이상의 입력이 필요한 경우 :

$ csh
% foreach n ( 1 2 3 )
? echo $n
? end
1
2
3  

또한보십시오:


링크 What's the difference between <<, <<< and < < in bash?가 오프라인이거나 잘못되었습니다.
Tico

@ 티코 감사합니다. 답은 초당 밀리 터틀의 인터넷 속도로 작성되었으며 부분적으로 복사 된 링크 만 발생했습니다. 지금 수정
Sergiy Kolodyazhnyy

3
한편 zsh는 실제로 무엇을 기다리고 있는지 알려주기에 충분히 친절합니다. 명령이 유효하다고 생각했지만 무언가를 피하는 것을 잊었을 때 유용합니다.
Kevin

30

쉘은 막판 견적을 기다리고 있습니다. 입력하면 평상시와 똑같이 수행하고 입력 한 명령을 실행하려고 시도합니다.

따옴표는 쉘이 특수 문자를 해석하지 않도록하므로 확장이 수행되지 않습니다. 작은 따옴표는 특수 문자의 모든 해석을 완전히 억제합니다. 일반적으로 개행은 명령을 분리하지만 여기서는 개행을 인용하여 명령의 일부로 개행을 포함 시켰습니다.

와 같은 명령 <newline>ls<newline>이 없으므로 찾을 수 없습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.