이 쉘 스크립트에 종료 코드를 포함하는 부울 표현식을 사용하는 목적은 무엇입니까?

이 쉘 스크립트에 종료 코드를 포함하는 부울 표현식을 사용하는 목적은 무엇입니까?

이 답변으로 해결되는 문제가 있습니다.https://superuser.com/a/508761

이제 다른 작업을 수행하기 위해 확장해야 하지만 먼저 수정하기 전에 작동 방식을 더 잘 이해해야 합니다. 문제의 스크립트는 다음과 같습니다.

#!/bin/bash

(( $# != 2 )) && exit 1

for f in *; do
  newf="${f//$1/$2}"
  if [[ $f != $newf ]]; then
    mv "$f" "$newf"
  fi
done

무엇을 (( $# != 2 )) && exit 1합니까? 온라인에서 설명을 찾는 데는 운이 거의 없었습니다. 각 구성 요소가 무엇인지는 알아냈지만 스크립트 전체에서 전체 줄이 수행하는 작업은 알 수 없었습니다. 대답은 그 줄을 설명하지 않았습니다. 포스터는 2년 전에 마지막으로 온라인에 게시되었으며 5년 전의 질문을 굳이 묻고 싶지 않아서 여기에 있습니다.

답변1

컨트롤 오퍼레이터입니다

에서강타 남자:

제어 연산자 && 및 || 각각 AND 목록과 OR 목록을 나타냅니다.
 AND 목록의 형식은 
command1 && command2 입니다.
command2는 command1이 종료 상태 0을 반환하는 경우에만 실행됩니다. [..자르다..] AND 및 OR 목록의 반환 상태는 마지막 명령의 종료 상태입니다. 목록에서 실행됩니다.
제어 연산자~이다
    제어 기능을 수행하는 토큰입니다. 다음 기호 중 하나입니다.
        || & && ; ;; ( ) |
 

(크레딧)

&&따라서 이 경우 부울 연산자로 읽지 마십시오 . 이제 exit 1실행 시기를 알 수 있습니다. 이전 명령이 성공한 경우에만(종료 상태가 0인 경우)

이것 좀 봐서버 결함 응답~을 위한&&Bash의 3가지 다른 컨텍스트에 대한 설명입니다 .이들 간의 차이점을 학습하는 데 유용합니다.

답변2

스크립트에 정확히 두 개의 인수가 전달되지 않은 경우 해당 줄에서 스크립트를 종료합니다.

  • $#argcC에서 와 유사하게 스크립트를 호출할 때 전달된 인수의 수입니다.

  • (( $# != 2 ))0인수 개수가 다음과 같지 않으면 진정한 코드( )를 반환합니다.2

  • &&왼쪽이 진정한 코드로 종료된 경우에만 오른쪽을 실행합니다. 이는 인수 수가 2가 아닌 경우 오른쪽이 실행됨을 의미합니다.

  • exit 1의 거짓 종료 코드로 스크립트를 종료합니다 1. 이 시점에서 스크립트가 중단되고 호출자에게 오류가 있음을 알립니다.

관련 정보