Development Tip

Bash if 문에서 대괄호는 언제 필요합니까?

yourdevel 2020. 12. 10. 21:25
반응형

Bash if 문에서 대괄호는 언제 필요합니까?


일반적으로 if 문에 대괄호를 사용합니다.

if [ "$name" = 'Bob' ]; then ...

그러나 grep성공 했는지 확인할 때 대괄호를 사용하지 않습니다.

if grep -q "$text" $file ; then ...

if문장 에서 대괄호는 언제 필요 합니까?


대괄호는 test명령 의 동의어입니다 . if문은 걸릴 분기를 결정하기 위해 명령의 종료 상태를 확인합니다. grep -q "$text"명령이지만 "$name" = 'Bob'그렇지 않습니다. 단지 표현 일뿐입니다. test표현식을 받아서 평가하는 명령입니다.

if test "$name" = 'Bob'; then ...

대괄호는 test명령 의 동의어이므로 원래 명령문으로 다시 작성할 수 있습니다.

if [ "$name" = 'Bob' ]; then ...

[실제로는 명령과 동등한 (거의 아래 참조) test명령입니다. 셸 구문의 일부가 아닙니다. ( 셸에 따라 [test모두 내장 된 명령이기도하지만 성능을 제외하고는 동작에 영향을주지 않습니다.)

if문은 명령을 실행하고 실행 then명령이 성공하면 일부, 또는 else일부 (있는 경우)가 실패 할 경우. (명령이 상태 ( $?) 0으로 종료하면 성공하고 0이 아닌 상태로 종료하면 실패합니다.)

if [ "$name" = 'Bob' ]; then ...

명령은

[ "$name" = 'Bob' ]

(없이 동일한 명령을 직접 실행할 수 있습니다 if.)

if grep -q "$text" $file ; then ...

명령은

grep -q "$text" $file

man [또는 man test더 많은 정보를 원하시면.

각주 : 음, [명령은 명령과 거의 동일합니다 test. 차이점은 마지막 주장으로 [필요 ]하지만 test실제로 허용하지 않는다는 것입니다. (그것은하지 않은 그런 식으로 구현할 있지만, [일치하지 않고는 ]매우 매우 신경 많은 사람들이 만들었을 것입니다.)


[ ... ]구문 을 생각하는 가장 좋은 방법은 프로그램이라고 생각 [하는 것입니다.

이것 좀 봐:

~ $ ls /usr/bin/\[ 
/usr/bin/[

반면 에 쉘 내장으로 bash제공 되기 때문에 해당 버전을 사용하지 않을 것 [입니다.

어쨌든, 귀하의 질문에 대답하려면 : if당신이 제공하는 명령을 실행하고 반환 값이 있는지 확인하십시오 0. [문자열 비교와 같이 더 흥미로운 다른 비교를 수행 하는 사용 합니다. man [및을 참조하십시오 man bash.

참고 URL : https://stackoverflow.com/questions/8934012/when-are-square-brackets-required-in-a-bash-if-statement

반응형