'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 [ ]또는 if [[ ]], [ ]및 를 실행하면 조건이 true로 테스트되면 [[ ]]반환되는 프로그램이나 셸이 내장됩니다 . 로 0변환하면 항상 대괄호 없이 양식이 실행되는 것을 볼 수 있습니다.[test

if [ ... ]
# same as 
if /bin/test ...

1if 좀 더 정확하게 구성하는 방법을 살펴보겠습니다.정의된다:

그만큼만약에명령은 다음을 실행해야합니다화합물 목록종료 상태를 사용하여 다른 실행 여부를 결정합니다.화합물 목록.

형식은만약에구성은 다음과 같습니다.

if compound-list 
then
    compound-list
[elif compound-list 
then
    compound-list] ...
[else
    compound-list]
fi

참고화합물 목록와 동일하지 않습니다복합 명령.

관련 정보