(참고: 예매우 유사한 질문, 어제 이상하다고 물었지만 내가 관심 있는 주요 구문을 다루지 않습니다. 이를 포함하도록 다른 질문을 업데이트하면 답변이 더 이상 유효하지 않게 될 수 있으므로 여기서는 다른 질문에서 누락된 내용에 중점을 두겠습니다. 전체 그림을 보고 싶은 사람은 누구나 이 두 가지 질문과 그에 대한 답변을 살펴보아야 합니다. )
나는 일반적으로 if 문을 다음과 같이 작성합니다.
if [[ -z "$SOMETHING" ]]; then
# blah blah blah
fi
이것은 Bash와 Z Shell에서 나에게 잘 작동했지만 최근에대괄호를 완전히 제거하는 구문:
if command -v given-command > /dev/null 2>&1; then
echo given-command is available
else
echo given-command is not available
fi
괄호가 없는 버전은 이식 가능합니까? 제공되는 옵션과 비교하면 어떻습니까?여기?
내 표준 버전은 주로 Bash 및 Z Shell에서만 지원됩니까( [[ -w /home/durrantm ]] && echo "writable"
다른 질문에 언급된 버전과 유사)?
답변1
예, 귀하의 표준 버전은 귀하가 의견에 링크한 질문에서와 같이 POSIX 표준이 아닙니다. 그러나 다음과 같은 경우가 있습니다.
if some-command args; then ...
나는 이것이 이것의 유일한 휴대용 형태라고 말하고 싶습니다 if
. 그것이 if
바로 그것이기 때문입니다. (함수, 쉘 내장 또는 실행 가능1일 수 있음 ) 이 런타임에 사용된 인수와 입력을 반환하는 if
경우 일부 작업을 수행합니다.some-command
0
if [ ]
or if [[ ]]
, and 를 실행하면 [ ]
조건부 테스트가 true 인 경우 [[ ]]
프로그램이나 쉘 내장이 반환됩니다 . 로 0
변환하면 항상 대괄호 없이 양식을 실행한다는 것을 알 수 있습니다.[
test
if [ ... ]
# same as
if /bin/test ...
1보다if
정확하게는 어떻게 구축하는지 살펴보겠습니다.다음과 같이 정의됩니다.:
이것만약에명령이 실행되어야 합니다.화합물 목록종료 상태를 사용하여 다른 실행 여부를 결정합니다.화합물 목록.
형식은만약에구조는 다음과 같습니다.
if compound-list then compound-list [elif compound-list then compound-list] ... [else compound-list] fi