[server] Linux Bash 구문 : &&, \ 및-의 의미

bash 명령의 끝에서 ‘ &&‘, ‘ \‘및 ‘ -‘은 무엇을 의미합니까?

특히, 우분투의 적성 패키지 관리자에 공개 키를 추가 해야하는 다음과 같은 라인 조합을 발견했습니다. 여기에서 사용되는 문자는 무엇입니까?

    gpg --keyserver keyserver.ubuntu.com --recv 26C2E075 && \
    gpg --export --armor 26C2E075 | sudo apt-key add-&& \
    sudo apt-get 업데이트



답변

“&&” 는 명령을 함께 연결하는 데 사용되므로, 이전 명령이 오류없이 종료 된 경우에만 (또는 더 정확하게는 리턴 코드 0으로 종료) 다음 명령이 실행됩니다.

줄 끝의 “\” 자체는 줄을 서로 연결하는 수단입니다. 따라서 다음 두 줄 :

gpg --keyserver keyserver.ubuntu.com --recv 26C2E075 && \
gpg --export --armor 26C2E075

행이 단일 행으로 작성된 것과 동일하게 처리됩니다.

gpg --keyserver keyserver.ubuntu.com --recv 26C2E075 && gpg --export --armor 26C2E075

“-“ 는 특정 bash 함수가없는 명령 행 인수입니다. 정확하게 처리되는 방법은 실행중인 명령 (이 경우 apt-key )에 따라 다릅니다 . 상황에 따라, 일반적으로 하나 표시 “하는 데 사용되는 표준 입력이 아닌 파일에서 데이터를 읽어 “또는 ” 데이터로서가 아니라 명령 행 인수로 라인의 나머지 부분을 처리합니다 .”


답변

&& == if the first command succeeded, run the next one
\ == the next line is part of the first line, not two seperate lines
- == read the input from stdin (console)


답변

&&는 논리 AND입니다.
&&는 논리 AND 를 표현하는 방법입니다 . 즉, 양쪽이 모두 참인 경우에만 전체 표현식이 참임을 의미합니다. 논리적으로, 전체 진술 (P & Q)은 P와 Q가 모두 참일 때만 참이라고합니다.

그 결과 컴퓨터는 일반적으로 P & Q를 단락 평가로 취급 합니다. 따라서 P와 Q가 모두 참이면 전체 문장 만 참이므로 P가 거짓이면 문장 Q는 평가되지 않습니다 . 기본적으로 컴퓨터는 게으르고 (효율적), Q가없는 경우 Q를 평가하지 않아도됩니다. 이것은 논리 OR의 참이기도합니다. 이전 링크를 참조하십시오.

Bash에서 &&의 세 가지 맥락 :

1) 명령 종료 상태에서 단락 평가 사용 :
모든 명령에는 종료 상태가 있습니다. 명령에 오류가 있으면 종료 상태가 0이 아닙니다. 따라서 종료 상태가 0이 아니고 &&를 사용하여 명령을 명령문으로 연결하는 경우, 이전 명령의 종료 상태가 0 (참)이 아닌 경우 이후 명령이 평가 (실행)되지 않습니다. 이것은 단락 평가 때문입니다. 당신이 가지고 있다면 :

P && Q

P가 참이 아닌 경우 Q는 실행되지 않습니다 (P가 0 이외의 상태로 종료되면 참이 아닙니다). 다음과 같습니다 :

./configure && make

configure에 오류가 있으면 make가 실행되지 않습니다. 따라서 기본적으로 if 문에 다음과 같이 작성하는 방법이됩니다.

if ./configure ; then
   make
fi

대부분의 상황에서 0은 false이지만 종료 상태에 관한 것은 아닙니다.

2) &&는 Bash의 내장 [[]] 테스트 명령에서 사용할 수 있습니다.

&& bash [[]]의 내장 테스트 명령 안에서도 명령을 결합하는 것과 유사한 방식으로 표현식을 결합 할 수 있습니다. &&의 두 피연산자 (측면)가 모두 true 인 경우에만 전체 테스트 작업이 적용됩니다.

if [[ ( $a -gt 2 ) && ( $a -lt 5 ) ]]; then ... 

$ a가 2와 5 사이의 정수인지 여부를 말하는 방법입니다 (2와 5는 제외).

3) 산술 평가 :

마지막으로 &&는 산술 평가에서 논리 AND로 사용될 수 있습니다. 경우 모두 0이 아닌있는 다음의 번호 (논리 AND), 그것은 다른 일을 반환, 0 반환

kbrandt@desktop:~/$ echo $((1 & 1))
1
kbrandt@desktop:~/$ echo $((0 && 1))
0


답변

나는 당신이 “진짜”의미에 대한 설명으로 더 나을 것이라고 생각합니다.

  • && 는 “AND”제어 연산자입니다. 에서 bash는 사람 :
    제어 연산자 && 및 || AND 목록과 OR 목록을 각각 나타냅니다.
    AND리스트의 형식은
        command1 && command2
    command2는 command1이 종료 상태 0을 리턴하는 경우에만 실행됩니다.
    [..절단..]
    AND 및 OR 목록의 리턴 상태는 마지막 명령의 종료 상태입니다.
    목록에서 실행됩니다.
    

    제어 연산자 이며

    제어 기능을 수행하는 토큰. 다음 기호 중 하나입니다.
        || & &&; ;; () |
    
  • \이스케이프 문자 “이며 bash에서 사용할 수있는 세 가지 인용 메커니즘 중 하나입니다.
    인용
       인용은 특정 문자 나 단어가 쉘에 특수한 의미를 제거하는 데 사용됩니다.
    [..절단..]
       이스케이프 문자, 작은 따옴표 및 큰 따옴표 등 세 가지 인용 메커니즘이 있습니다.
       따옴표가없는 백 슬래시 (\)는 이스케이프 문자입니다. 다음을 제외한 다음 문자의 리터럴 값을 유지합니다. \ 쌍이 나타나고 백 슬래시 자체가 인용되지 않은 경우, \는 줄 연속으로 처리됩니다 (즉, 입력 스트림에서 제거되어 효과적으로 무시됩니다).
    [..절단..]
    백 슬래시는 $,`, ", \ 또는. 문자 중 하나가 뒤에 오는 경우에만 특별한 의미를 유지합니다.
    

    이것은 줄의 맨 끝에 이스케이프 문자 ( “\”)를 넣으면 실제로 바로 뒤에 오는 새 줄 문자 (RETURN 문자)를 이스케이프하여 “줄 계속”효과를 나타냅니다. 다른 사람들은 이미 답변에서 설명했습니다

  • 일부 명령이 매개 변수로 허용하는 대시 문자 ” “는 쉘 특수 문자 나 연산자가 아닌 규칙입니다. 이미 지적했듯이 표준 I / O 스트림에 대한 일종의 장소 표시 자입니다. 프로그램에 따라 stdin (표준 입력) 또는 stdout (표준 출력)을 유지할 수 있습니다.

내 2 센트


답변