Programing

괄호와 대괄호가있는 IF 문 간의 Bash 차이

crosscheck 2020. 12. 25. 22:59
반응형

괄호와 대괄호가있는 IF 문 간의 Bash 차이


대해 조금 배우면서 if을 사용하는 네 가지 유형의 방법을 보게됩니다 .

  • 단일 괄호-(...)
  • 이중 괄호-((...))
  • 단일 대괄호-[...]
  • 이중 대괄호-[[...]]

bash에서 괄호와 대괄호의 차이점은 무엇입니까?


나열한 테스트 :

  • 단일 괄호-(...)는 서브 쉘을 생성합니다.
  • 이중 괄호-((...))는 산술 연산 용입니다.
  • 단일 대괄호-[...]는 POSIX의 구문입니다. test
  • 이중 대괄호-[[...]]는 bash 조건식의 구문입니다 (비슷 test하지만 더 강력 함).

완전하지 않은 경우 부울 논리를 사용할 수 있습니다.

if command; then ...

명령이 종료 상태이기 때문입니다. 에서은 bash, 0이다 true>하고 0있다 false.

다음과 같은 종료 상태를 볼 수 있습니다.

command
echo $?

보다 :

http://wiki.bash-hackers.org/syntax/basicgrammar
http://wiki.bash-hackers.org/syntax/arith_expr
http://mywiki.wooledge.org/BashGuide/TestsAndConditionals


쉘 자체는 명령을 실행하고 종료 코드를 평가합니다. 0 종료 코드는 성공을 나타냅니다. 다른 모든 값은 실패를 나타냅니다.

if command; then
    : things to do if the exit code from command was 0
else
    : things to do if it was not 0
fi

while command; do
    : things to do if the exit code was 0
done

원래 Bourne 쉘에는 문자열이 비어 있는지 또는 파일이 있는지 확인하는 내장 연산자가 없기 때문에 명령 [(일명 test)은 조건문에서 매우 일반적으로 사용됩니다. 최신 셸에는이 명령이 내장되어 있고 많은 셸에 확장 및 현대화 된 버전 [[이 있지만 POSIX로 적절하게 이식 할 sh수 없으므로 이식 가능한 스크립트에서는 피해야합니다. 이 관련 질문 은 둘의 차이점을 더 자세히 설명합니다.

표기법 (( ... ))은 산술 컨텍스트를 도입합니다. 다시 말하지만, 이것은 원래 Bourne 쉘 ( expr이러한 것들에 대한 전용 외부 도구 가 있음)의 일부가 아니지만 현대 쉘에는이 기능이 내장되어 있습니다. 산술 평가의 결과가 다음과 같으면 산술 표현식의 결과 코드는 0입니다. 0 (또는 오류)이 아닙니다.

표기법 ( command )은 서브 쉘을 생성하고이를 평가 command합니다. 이것이 실제로 필요하고 유용한 상황이 있지만 구문을 배우는 것뿐이라면 이것이 필요하지 않을 것입니다.

... 사실, 대부분의 스크립트에서 이것이 조건부로 사용되는 것을 보았지만 분명히 불필요했습니다.

주의해야 할 또 다른 반 패턴은

command
if [ $? = 0 ]; then
    : things
fi

당신은 거의 조사 할 필요가해서는 안 $?명시 적으로, 특히, 0으로 비교하는 것은 뭔가 if하고 while 특히 뒤에서 당신을 위해 할. 이것은 단순히 리팩토링되어야합니다.

if command; then
    : ...

참조 URL : https://stackoverflow.com/questions/12765340/difference-in-bash-between-if-statements-with-parenthesis-and-square-brackets

반응형