[bash] 쉘 명령에서“&&”의 목적은 무엇입니까?

내가 아는 &한 백그라운드에서 명령을 실행하기위한 것입니다.

&사용 예 :tar -czf file.tar.gz dirname &

하지만 &&어때요? (이 예제를보십시오 : /server/215179/centos-100-disk-full-how-to-remove-log-files-history-etc#answer-215188 )



답변

&&이전 명령이 성공적으로 완료되었는지 여부에 따라 무언가를 수행 할 수 있습니다 do_something && do_something_else_that_depended_on_something.


답변

또한 ||논리 또는 논리가 있으며 ;이전 명령에서 발생한 일을 신경 쓰지 않는 구분 기호 이기도 합니다.

$ false || echo "Oops, fail"
Oops, fail

$ true || echo "Will not be printed"
$

$ true && echo "Things went well"
Things went well

$ false && echo "Will not be printed"
$

$ false ; echo "This will always run"
This will always run

이에 대한 자세한 내용은 Bash 매뉴얼 의 명령 목록 에서 확인할 수 있습니다 .


답변

명령 줄-목적은 &&무엇입니까?

셸에서 볼 때

$ command one && command two

의도는 &&첫 번째 명령이 성공한 경우에만 뒤에 오는 명령을 실행하는 것 입니다. 이것은 Posix 쉘의 관용적이며 Bash에서만 찾을 수는 없습니다.

첫 번째 프로세스가 실패하면 두 번째 프로세스가 실행되지 않도록합니다.

내가 “의도”라는 단어를 사용했음을 알 수 있습니다. 그 이유는 그만한 이유입니다. 모든 프로그램이 동일한 동작을 갖는 것은 아니므로, 이것이 작동하려면 프로그램이 “실패”로 간주하는 내용과 설명서 및 필요한 경우 소스 코드를 읽고 프로그램을 처리하는 방법을 이해해야합니다.

쉘은 true의 경우 리턴 값 0을, false의 다른 양수를 고려

프로그램 은 종료시 신호 를 반환합니다 . 성공적으로 종료되면 0을, 그렇지 않으면 0보다 커야합니다. 이를 통해 프로세스 간 통신량이 제한됩니다.

&&라고도 AND_IF에서 POSIX 쉘 문법 의 일부 and_or목록 도 포함 명령, ||있는 OR_IF비슷한 의미를 가진.

설명서에서 인용 된 문법 기호 :

%token  AND_IF    OR_IF    DSEMI
/*      '&&'      '||'     ';;'    */

그리고 Grammar (문서에서 인용)는 AND_IFs ( &&) 및 / 또는 OR_IFs ( ||)가 함께 and_or재귀 적으로 정의 될 수 있음 을 보여줍니다 .

and_or           :                         pipeline
                 | and_or AND_IF linebreak pipeline
                 | and_or OR_IF  linebreak pipeline

두 연산자 모두 우선 순위가 동일하며 왼쪽에서 오른쪽으로 평가됩니다 (왼쪽 연결). 문서에서 말한 것처럼 :

AND-OR목록 사업자에 의해 분리 된 하나 개 이상의 파이프 라인의 서열이다 "&&"하고 "||".

목록은 하나 이상의 시퀀스이다 AND-OR 목록은 운영자에 의해 분리 ';'하고 '&'선택적으로 종료 ';', '&'또는.

연산자 "&&""||"같은 우선 순위를 가지며 왼쪽 연관성 평가되어야한다. 예를 들어, 다음 명령은 모두 표준 출력에 대한 막대만을 작성합니다.

$ false && echo foo || echo bar
$ true || echo foo && echo bar
  1. 첫 번째 경우, false는 다음 상태로 종료되는 명령입니다. 1

    $ false
    $ echo $?
    1

    이는 echo foo작동하지 않는 것을 의미 합니다 (즉, 단락 echo foo). 그런 다음 명령 echo bar이 실행됩니다.

  2. 두 번째 경우, true는 코드로 종료됩니다. 0

    $ true
    $ echo $?
    0

    따라서 echo foo실행되지 않은 다음 echo bar실행됩니다.


답변

‘&&’의 일반적인 사용법은 autotools로 소프트웨어를 컴파일하는 것입니다. 예를 들면 다음과 같습니다.

./configure --prefix=/usr && make && sudo make install

기본적으로 configure가 성공하면 컴파일을 위해 make가 실행되고, 성공하면 make가 root로 실행되어 프로그램을 설치합니다. 나는 일이 잘 될 것이라고 확신 할 때 이것을 사용하며, 진행 상황을 ‘모니터’하지 않고 stackoverflow를 보는 것과 같은 다른 중요한 일을 할 수 있습니다.

때때로 나는 정말로 쫓겨 난다 …

tar xf package.tar.gz && ( cd package; ./configure && make && sudo make install ) && rm package -rf

예를 들어 처음부터 리눅스를 만들 때이 작업을 수행합니다.


답변

&&문자열을 함께 명령합니다. 후속 명령은 이전 명령이 성공한 경우에만 실행됩니다.

마찬가지로 ||앞의 명령이 실패 할 경우 연속 명령을 실행할 수 있습니다.

Bash Shell Programming을 참조하십시오 .


답변

예를보십시오 :

mkdir test && echo "Something" > test/file

쉘은 디렉토리를 생성하려고 시도하고 test, 성공한 경우에만 그 안에 파일을 생성하려고 시도합니다.

따라서 단계 중 하나가 실패하면 일련의 단계를 중단 할 수 있습니다.


답변

첫 번째 문이 성공적으로 끝나면 두 번째 문을 실행해야합니다. if 문처럼 :

 if (1 == 1 && 2 == 2)
  echo "test;"

첫 번째는 1 == 1이면 시도하고, 참이면 2 == 2인지 확인합니다.