[bash] 쉘 스크립트의 줄 끝에 세미콜론이 불필요합니까?

다음을 포함하는 쉘 스크립트가 있습니다.

case $1 in
    0 )
    echo $1 = 0;
    OUTPUT=3;;
    1 )
    echo $1 = 1;
    OUTPUT=4;;
    2 )
    echo $1 = 2;
    OUTPUT=4;;
esac

HID=$2;
BUNCH=16;
LR=.008;

인가 세미콜론은 위의 코드 조각에서 완전히 불필요? 그리고 어떤 사람들이 이중 세미콜론을 사용하는 이유가 있습니까?

세미콜론은 새 줄 대신 사용하는 구분 기호 일뿐입니다.



답변

줄 끝에있는 단일 세미콜론은 줄 바꿈도 명령 구분 기호이기 때문에 불필요합니다. case특히 각 패턴 블록의 마지막 명령 끝에 이중 세미콜론이 필요합니다. 자세한 내용 help case은 참조하십시오.


답변

에 따르면 man bash:

  metacharacter
         A character that, when unquoted, separates words.  One of the following:
         |  & ; ( ) < > space tab
  control operator
         A token that performs a control function.  It is one of the following symbols:
         || & && ; ;; ( ) | |& <newline>

따라서 ;는 메타 문자 또는 제어 연산자 일 수 있으며 ;;는 항상 제어 연산자 (명령의 경우)입니다.

특정 코드에서는 ;줄 끝의 모든 것이 필요하지 않습니다. 은 ;;그러나 필요합니다.


답변

find의 특별한 경우에는 ;-exec에 의해 호출 된 명령을 종료하는 데 사용됩니다. 이 질문에 대한 @kenorb의 대답을 참조하십시오 .


답변

@ Opensourcebook-Amit

;터미널 또는 쉘 스크립트의 단일 세미콜론 에 해당하는 줄 바꿈 .

아래 예를 참조하십시오.

터미널에서 :

[root@server test]# ls;pwd;

쉘 스크립트에서 :

[root@server test]# cat test4.sh

echo "Current UserName:"
whoami

echo -e "\nCurrent Date:";date;

[root@server test]#

그러나 나는 &개행 또는 단일 세미콜론에 해당 하는 주석에 동의하지 않습니다.

& 백그라운드에서 실행 명령도 명령 구분 기호이지만 세미콜론이나 줄 바꿈으로 작동하지 않습니다.


답변

@Ignacio Vazquez-Abrams

사실이 완전히 정확하지 않은 줄 끝에서 단일 세미콜론은 없습니다 불필요한 확실히 새로운 라인과 같은 것이 아니다.

로부터 배쉬 참조 설명서

‘;’로 구분 된 명령 순차적으로 실행됩니다. 쉘은 각 명령이 차례로 종료되기를 기다립니다. 반환 상태는 마지막으로 실행 된 명령의 종료 상태입니다.

세미콜론으로 구분 된 명령이 항상 순차적으로 실행될 때 “새 줄”로 구분 된 명령이 병렬 실행될 수 있습니다.


답변