
내가 볼
if cmd
then
echo Hi
fi
와는 다르게 작동합니다
if [[ $(cmd) ]]
then
echo Hi
fi
그렇다면 [[가 있고 없으면 어떻게 될까요?
답변1
셸에는 [
테스트 명령의 별칭이 있습니다. 그것~이다명령. 이는 [[
약간만 다른 일부 쉘의 특징입니다. Bash에서는 명령이 아닌 키워드이지만 명령처럼 작동합니다.
다음과 같이 생각할 수 있습니다. [[
"$(cmd)"의 출력을 해당 명령에 대한 인수로 실행하고 제공하고 있습니다. if
그런 다음 의 반환 상태를 확인합니다 [[
. 에 연산자가 지정되지 않으면 가 [[
암시 -n
됩니다.
-n string
True if the length of string is non-zero.
귀하의 예를 들어:
if cmd # check the return status of cmd
if [[ $(cmd) ]] # check if cmd has any output
답변2
대괄호 없는 명령문 은 bash 명령으로 평가된 후 if expr
반환 상태를 확인합니다 . expr
성공하면 값으로 처리됩니다 true
.
반면에 if [[ expr ]]
이중 대괄호는 bash
- 특정입니다.예어-f /path/to/file
파일 존재 테스트와 같은 자체 옵션 세트를 처리 하거나 $a == $b
. 이러한 대괄호 내에서 일부 표현식을 if [[ $(cmds) ]]
. 그렇지 않으면 거기에 있는 모든 항목을 특수 표현식으로 처리하고 다르게 구문 분석됩니다.
if [ expr ]
일반적으로 별칭(또는 어떤 경우에는 대략적인 구현)인 구문 도 있습니다 if test expr
. 명령 test
에 사용할 수 있는 옵션이 있으면 단일 대괄호 사이에서도 사용할 수 있습니다.
더 재미있게 말하자면, 숫자를 다룰 때 가장 좋은 구문이 있습니다 if ((expr))
. 내부의 모든 것이 산술 표현식으로 평가되기 때문입니다. 이는 이중 괄호와 마찬가지로 키워드이기도 합니다.
기본적으로 if expr
and if [ expr ]
는 이식 가능하며(즉, 모든 쉘이 이를 처리할 수 있고 거의 동일하게 처리할 수 있음) and if [[ expr ]]
구현 if (( expr ))
에 따라 다릅니다. 즉, 평가가 사용 중인 쉘에 따라 크게 달라지는 키워드입니다(그리고 사용하는 경우). bash
, zsh
또는 같은 것을 사용하지 않으면 ksh
존재하지 않을 수도 있습니다).