나는 보았다
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 ]
는 이식 가능하며(즉, 모든 쉘은 이를 처리하고 거의 동일하게 처리할 수 있음) 구현 if [[ expr ]]
에 따라 if (( expr ))
다릅니다. 즉, 키워드이며 평가는 쉘을 사용하는 위치에 따라 크게 달라집니다( 사용하는 경우에는 존재하지 않을 수도 있습니다 ). bash
, zsh
, 또는 )과 같은 것을 사용하지 마십시오.ksh