"if" 문의 가장 이식성이 높은 구문은 무엇입니까?

"if" 문의 가장 이식성이 높은 구문은 무엇입니까?

(참고: 예매우 유사한 질문, 어제 이상하다고 물었지만 내가 관심 있는 주요 구문을 다루지 않습니다. 이를 포함하도록 다른 질문을 업데이트하면 답변이 더 이상 유효하지 않게 될 수 있으므로 여기서는 다른 질문에서 누락된 내용에 중점을 두겠습니다. 전체 그림을 보고 싶은 사람은 누구나 이 두 가지 질문과 그에 대한 답변을 살펴보아야 합니다. )

나는 일반적으로 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-command0

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

참고하시기 바랍니다화합물 목록와는 다르다복합 명령.

관련 정보