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
'Development Tip' 카테고리의 다른 글
| .NET의 Windows 서비스에서 현재 로그인 된 사용자 이름을 얻으려면 어떻게합니까? (0) | 2020.12.10 |
|---|---|
| 다른 열에서 계산 된 열? (0) | 2020.12.10 |
| NameError : 'reload'이름이 정의되지 않았습니다. (0) | 2020.12.10 |
| Grunt를 사용하는 노드 앱을 Heroku에 배포하는 방법 (0) | 2020.12.10 |
| CSS 전역 변수 만들기 : 스타일 시트 테마 관리 (0) | 2020.12.10 |