"if"가 불필요한 경우는 언제입니까?

"if"가 불필요한 경우는 언제입니까?

일부 스크립트에서는 if다음과 같이 작성된 조건문을 볼 수 있습니다.

if [ some_conditional_statement ]; then
    # do stuff
fi

또는

[ some_conditional_statement ] && #do stuff

두 번째 예는 동일하지만(do stuff 부분은 조건이 true인 경우에만 실행됨) 다음과 같이 하나의 명령만 실행해야 하는 경우에만 유용합니다.

[ -f "/path/to/some/file" ] && . /path/to/some/file

아니면 제가 놓친 다른 차이점이 있나요?

답변1

좋아, 나는 (또는 bash에서) 본질적으로 부작용이 없는 명령이지만 조건을 평가하고 적절한 종료 상태를 제공한다는 것을 이해했다고 생각합니다. 당신은 s를 함께 연결한다고 언급했습니다. 당신은 이것을 할 수 있습니다;[ condition ][[ condition ]]&&

A  &&  B  &&  C

동등하다

if A
then
    if B
    then
        C
    fi
fi

그런데 당신은 어떻게 되냐고 묻는 것 같군요.

if A
then
    B
    C
fi

당신은 이것을 할 수 있습니다

A  &&  (B; C)

또는

A  &&  { B; C;}

노트:

  • 대괄호는 하위 쉘을 제공합니다. 즉, 명령이 하위 프로세스에서 실행 B됩니다 . C따라서 변수 할당과 같은 명령은 cd상위 쉘에 영향을 미치지 않습니다. 중괄호로 묶인 명령은 명령과 동일한 프로세스에서 실행됩니다 A.
  • 중괄호 구문에는 다음이 있습니다.~ 해야 하다그 뒤에 공백이 있고 {다음이 있습니다.~ 해야 하다선행  ;(또는 개행) 문자입니다.&}

내 생각:

if가독성을 높이려면 -- 구문을 사용하는 것이 좋습니다 .thenelse

답변2

if 절은 그 사이에 있는 모든 것을 실행하며 then다음 fi표현식이 iftrue인 경우 이는 쉘 용어로 종료 값이 0임을 의미합니다. 명령이나 괄호(명령의 약칭)를 사용할 수 있습니다 test. 이 a && b구조는 "a를 평가하고, true이면 b도 평가합니다"를 의미합니다. 따라서 두 예제는 동일하지만 if 절이 더 읽기 쉽고 여러 명령을 그룹화하는 데 사용할 수 있습니다.

관련 정보