괄호와 대괄호가있는 IF 문 간의 Bash 차이
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
: ...
'Programing' 카테고리의 다른 글
조인 된 테이블에서 LIMIT 1로 MySQL JOIN (0) | 2020.12.25 |
---|---|
“[네이티브 코드]”는 무엇을 의미합니까? (0) | 2020.12.25 |
SQL 쿼리 (값이 null이면 1 반환) (0) | 2020.12.14 |
~ "calc (100 %-@spacing)"과 같이 ~ 연산자에 대해 Less에서 변수를 사용하는 방법이 있습니까? (0) | 2020.12.14 |
"sudo"로 마지막 명령 반복 (0) | 2020.12.14 |