이 답변으로 해결되는 문제가 있습니다.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
스크립트에 정확히 두 개의 인수가 전달되지 않은 경우 해당 줄에서 스크립트를 종료합니다.
$#
argc
C에서 와 유사하게 스크립트를 호출할 때 전달된 인수의 수입니다.(( $# != 2 ))
0
인수 개수가 다음과 같지 않으면 진정한 코드( )를 반환합니다.2
&&
왼쪽이 진정한 코드로 종료된 경우에만 오른쪽을 실행합니다. 이는 인수 수가 2가 아닌 경우 오른쪽이 실행됨을 의미합니다.exit 1
의 거짓 종료 코드로 스크립트를 종료합니다1
. 이 시점에서 스크립트가 중단되고 호출자에게 오류가 있음을 알립니다.