
(참고: 있습니다.아주 비슷한 질문, 어제 이상하게도 물었지만 내가 관심 있는 주요 구문을 다루지 않습니다. 이를 포함하도록 다른 질문을 업데이트하면 답변이 더 이상 유효하지 않게 될 수 있으므로 여기서는 다른 질문에서 놓친 내용에 중점을 두겠습니다. 전체 그림을 원하는 사람은 질문과 답변을 모두 살펴봐야 합니다.)
나는 일반적으로 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 [ ]
또는 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