답변:
효과적으로 쉘은 완전한 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?가 오프라인이거나 잘못되었습니다.