&& 및 || 뒤에 bash 줄 연속은 어디에 있습니까? 문서화?


28

스크립트 에서이 구문을 많이 보았고 직접 사용했지만 문서에서 찾을 수없는 것으로 귀찮게합니다.

예:

[ -f file1 ] &&
[ -f file2 ] &&
echo "Both files exist." ||
echo "One or the other file doesn't exist."

다음과 같이 개행 전에 백 슬래시를 사용하여이 작업을 수행 할 수도 있습니다 man bash.

If a \<newline> pair appears,  and  the  backslash  is  not
itself  quoted,  the \<newline> is treated as a line continuation (that
is, it is removed from the input stream and effectively ignored).

예:

[ -f file1 ] && \
[ -f file2 ] && \
echo "Both files exist." || \
echo "One or the other file doesn't exist."

...하지만 이것이 필요하지 않은 것 같습니다. 위의 첫 번째 버전은 백 슬래시 없이도 작동합니다.

어디서 찾을 수 있습니까 man bash? (또한이 bash특정 또는 POSIX 호환입니까?)


공식 bash 또는 POSIX 설명서를 찾고 있다면 Gilles의 답변을 참조하십시오. 그러나 이것은 쉘의 제어 및 리디렉션 연산자는 무엇입니까?에서 설명합니다. - 에 대한 자세한 관찰 ;, &, () .
G-Man, 'Reinstate

@ G-Man, 나에게 지시되지 않은 것 같아? 미래 독자들을위한 것입니까? 질문에서 말했듯이 "문서에서 찾을 수없는 것 같아요." 나는 그것이 어떻게 작동하는지 이미 알고 있었으므로 이것은 공식 문서에 대한 요청 일뿐입니다. :)
와일드 카드

배열의 경우에도 암시 적 행 연속이 names=( Rama Soma<newline> Sita Diya )있습니다. 파이썬은 분명 이러한 설명 여기 하지만 배쉬 문서에 보이지 않는다.
jamadagni

답변:


39

명백히 종결되지 않은 명령이있는 일부 상황에서는 줄 바꿈이 무시됩니다. 이러한 상황은 제어 조작 후 등 ( &&, ||, |, &, ;, ;;,는 아니지만 !).

나는 이것을 bash 매뉴얼에 문서화하지 않았다.

POSIX에서는 문법 규칙을 통해 지정됩니다 . 규칙의 위치에 관계없이 linebreak줄 바꿈이 0 개 이상있을 수 있습니다.


+1, 나는 그것이 단순한 파이프 (|)에 효과가 있다는 것을 몰랐습니다. 가독성을 위해 다음 줄에 넣을 수도 있지만 그렇게 작동하지 않습니다 (그렇다면 이전 줄 바꿈을 이스케이프해야 함).
Olivier Dulac

1
@OlivierDulac 어떻게 가능할까요? 현재 명령 줄을 처리 할 때 |다음 줄의 시작 부분에 입력 할 계획인지 어떻게 알 수 있습니까? 쉘은 스크립트뿐만 아니라 대화식으로도 사용되며 문법도 동일합니다.
Barmar

@Barmar : 나는 알고있다, 나는 이것을 알고있다 (학교에서 컴파일러를 썼다 ^^) ... 나는 "원한다"고 말했고, 그럴듯한 소원이 아니다
Olivier Dulac

1
@DocSalvager, 예방에 도움이되는 논리 버그의 예를들 수 있습니까? 나는 그것을 보는 데 어려움을
Wildcard

2
@DocSalvager, 필자는 실제로 작성한 코드를 사용하지 않았으며 이는 예시였습니다. 마지막 줄 (else 절)이 없으면 그렇게 사용합니다. ( "이것과 이렇게하면 그렇게하면된다" this && this2 && that는 것은 괜찮지 만 else조항에 대해서는 실제를 사용할 것 if then else fi입니다.)
Wildcard
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.