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


103

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

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;

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

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

답변:


150

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


20
큰! 그래서, 내가 당신을 올바르게 이해한다면, 어떤 줄의 끝에서 어떤 단일 세미콜론도 안전하게 제거 할 수 있지만 결코 두 배는 제거 할 수 없습니까?
Nagel

29

에 따르면 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>

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

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


4
사이의 실질적인 차이가 무엇 ;하고 ;;다음? BASH가 "메타 문자"라고 부르는 것과 "제어 연산자"라고 부르는 것 사이의 실질적인 차이점을 알기에는 BASH 구문 분석에 익숙하지 않습니다.
jvriesem

1
jvriesem의 질문 및 의견에 동의, 워드 프로세서 니펫을 좁힐 너무 조금 보인다
grgry

6

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


0

@ 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]#

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

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


-2

@Ignacio Vazquez-Abrams

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

로부터 배쉬 참조 설명서

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

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


5
이것은 거짓입니다. 다른 점이 없다. 매뉴얼의 같은 섹션을 올바르게 읽으면 위의 몇 줄만 볼 수 있습니다. A sequence of one or more newlines may appear in a list to delimit commands, equivalent to a semicolon.따라서 세미콜론에 대해 인용 한 내용은 줄 바꿈에도 동일하게 적용됩니다.
underscore_d

1
이 문장이 모호하다는 데 동의합니다. 저자가 의미하는 바는 ";"입니다. 및 "\ n"은 명령을 분리하는 데 두 번 이상 사용할 수 있지만 동일한 작업을 수행한다는 의미는 아닙니다. 이 링크를 찾았습니다. unix.stackexchange.com/questions/53390/… 또한 제가 작성한 스크립트에 실제로 문제가 발생하고 ";"의 차이점에 대해 언급하기 전에도이 사실을 몰랐습니다. 내 동료 중 한 명이 "\ n". 불행히도 이것은 오래 전 일이었고 여기에 예제를 게시 한 것이 무엇인지 기억할 수 없습니다.
IJ

2
당신은 당신이 @IJ에 링크 된 게시물을 읽을한다면 당신은 병렬 처리가에서 오는 것을 볼 것 &아닙니다 \n. 코멘트에서 분명히 때문에 그가 세미콜론을 생략 할 수 있습니다 적혀 &또한 단지 같은 명령 구분 ;\n .
Matthias 2011
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.