
일부 스크립트에서는 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
가독성을 높이려면 -- 구문을 사용하는 것이 좋습니다 .then
else
답변2
if 절은 그 사이에 있는 모든 것을 실행하며 then
다음 fi
표현식이 if
true인 경우 이는 쉘 용어로 종료 값이 0임을 의미합니다. 명령이나 괄호(명령의 약칭)를 사용할 수 있습니다 test
. 이 a && b
구조는 "a를 평가하고, true이면 b도 평가합니다"를 의미합니다. 따라서 두 예제는 동일하지만 if 절이 더 읽기 쉽고 여러 명령을 그룹화하는 데 사용할 수 있습니다.