2012-02-17 2 views
0

쉘 스크립트에서 조건을 테스트하는 방법 중 적어도 4 가지를 알고 있습니다.쉘 스크립트의 조건문에 사용되는 다양한 유형의 브레이싱의 다양한 용도는 무엇입니까?

  • [ <cond> ];
  • [[ <cond> ]];
  • ((<cond>));
  • test <cond>;

나는 이러한 방법의 차이점이 무엇인지의 포괄적 인 개요를하고 싶은, 또한 경우에 사용하는 어떤 행동 양식.

요약 검색을 시도했지만 괜찮은 것을 찾지 못했습니다. 괜찮은 목록을 어딘가에 가지고있는 것이 좋을 것입니다 (구조에 스택 오버플로!).

+1

요약은 아니지만이 자습서를 참조하십시오. http://tldp.org/LDP/abs/html/testconstructs.html 및 다음 : http://www.ibm.com/developerworks/library/l-bash- test/index.html – EricSonaron

답변

1

여기에서 설명해 보겠습니다. 모든

먼저, 3 개 개의 다른 테스트 방법

  • [ EXPRESSION ]는 인 기본적으로 똑같은 정확히 let "EXPRESSION"
와 동일
  • [[ EXPRESSION ]]
  • ((EXPRESSION)), test EXPRESSION로서

    세부 사항으로 들어가십시오 :

    test

    테스트 명령의 할아버지입니다. 쉘이 그것을 지원하지 않더라도 사실상 모든 유닉스 시스템에는 여전히 /usr/bin/test 명령어가있다. 따라서 test을 호출하면 내장 또는 이진 파일을 폴백으로 실행합니다. 어떤 버전이 사용되는지 보려면 $ type test을 입력하십시오. [에 대해서도 마찬가지입니다.

    대부분의 기본 경우에는 테스트를 수행하기에 충분해야합니다. 당신이 더 많은 전력을 필요로한다면, 거기에

    if [ "$a" = test -o "$a" = Test ]; 
    if test "$a" = test -o "$a" = Test; 
    

    ...

    [[]]

    이 특별한 떠들썩한이다. 모든 쉘이이를 지원해야하는 것은 아니며 바이너리 대체가 없습니다. 그것은 더 강력한 비교 엔진, 특히 pattern matching과 정규식 일치를 제공합니다.

    if [[ "$a" == [Tt]es? ]]; # pattern 
    if [[ "$a" =~ ^[Tt]es.$ ]]; # RE 
    

    (())

    이 산술 표현식 떠들썩한 특별한 사용되며, 계산 결과가 제로가 아닌 경우에 그러하다. 모든 쉘이이를 지원해야하는 것은 아니며 바이너리 대체가 없습니다. ((...)) 또는 let 내에서 변수를 참조 할 때 당신이 $ 기호를 생략 할 수 있습니다

    if ((x * (1 + x++))); 
    if let "x * (1 + x++)"; 
    

    참고.

  • 1

    here 링크 된 사이트에서 특수 문자로 스크롤하면 [[에 대한 별도의 항목이 표시되며 이들 사이의 차이점에 대한 설명 링크가 표시됩니다. 그 아래에 ((에 대한 항목도 있습니다. 희망이 도움이됩니다!

    관련 문제