명령 $?
에 대한 인수로 [
명령 을 사용하려는 유일한 이유 는 ( 명령 [
의 조건 부분에서 명령이 실행 되는지 여부에 관계없이 if
) 다음과 같이 특정 리턴 상태를 구별하려고 할 때입니다.
until
cmd
[ "$?" -gt 1 ]
do
something
done
모든 사람들을위한 구문은 if
, while
, until
... 문이다
if cmd-list1
then cmd-list2
else cmd-list3
fi
성공 cmd-list2
여부 cmd-list1
에 관계없이 실행 됩니다 cmd-list3
.
[ "$?" -eq 0 ]
명령은 어떤 조합입니다. 이 설정 $?
경우 0으로 $?
0이며, $?
그 이외의 영점 인 경우 0이 아닌.
cmd
실패 했을 때 무언가를 실행하려면 다음과 같습니다.
if ! cmd
then ...
fi
일반적으로 $?
어떤 값이 true
또는을 의미하는지 혼자 알지 않아도됩니다 false
. 특정 값을 구별해야하거나 나중에 저장 해야하는 경우 (예 : 함수의 반환 값으로 반환) 유일한 경우는 위에서 말한 것입니다.
f() {
cmd; ret=$?
some cleanup
return "$ret"
}
또한 따옴표없는 변수를 남겨 두는 것은 split + glob 연산자라는 것을 기억하십시오. 여기에서 해당 연산자를 호출하는 것은 의미가 없으므로 다음과 같아야합니다.
[ "$?" -ne 0 ]
아니 [ $? -ne 0 ]
, 홀로 [$? -ne 0 ]
(만 호출 할 것이다 [
경우 명령 $IFS
의 첫 번째 문자를 포함 할 일이 $?
).
또한 함수를 정의하는 Bourne 방식 function-name()
은 명령 앞에 붙는 것 입니다. 즉, 제외 쉘과 같은 모든 Bourne 씨의 사건 bash
과 yash
(와 최신 버전의 posh
유일한 복합 명령 (화합물 명령 인 허용) {...}
나 (...)
또는 같은 것들 for...done
, if...fi
...
function foo { ... }
은 IS ksh
함수 정의 문법. 여기서 사용하고 싶은 이유는 없습니다.
코드를 이식 가능하게 (POSIX) 작성할 수 있습니다.
foo() (
cd -P -- "$FOOBAR" || return # what if the cd failed!
if
<some command>
then
echo 'OK!'
else
echo 'Nope!'
fi
)
또한 cd
없는 -P
특수한 의미 ( ..
다른 명령과 다르게 구성 요소 를 포함하는 경로를 처리 )가 있으므로 혼동을 피하기 위해 스크립트에 포함하는 것이 좋습니다.
(함수가 반환하는 false
경우는 cd
실패가 아닌 경우 <some command>
실패).
$?
IS가와 0이if
문 무의미if
명령을 예상하고 있는 경우 명령이 리턴 말했다0
, 그것은 블록의 코드를 실행합니다. 그래서if true; then echo hello; fi
명령이 에코합니다 안녕하세요 이후true
반환0
.