if
while
또는 문의 조건부 컨텍스트(예: 문자열이 단어인지 또는 버전 번호인지)에서 매개 변수를 테스트하는 사용자 정의 메서드를 올바르게 사용하려면 어떻게 해야 합니까 until
?
특히 (이중) 중괄호는 한쪽 측면의 테스트 방법에서 문제가 있는 것 같습니다 -gt
.
한 가지 메소드만 호출할 수 있나요? 그렇다면 그렇게 하기 위한 배경 요구사항은 무엇입니까? 그렇다면 내부/외부(이중) 괄호와 다른 명령문에서는 명령 if
대체 없이 함수 호출에 어떻게 반응합니까?while
until
다른 테스트 메소드를 호출하기 위해 명령 대체를 사용하지 않는 경우에도 부울 연산자를 통해 이들을 연결할 수 있습니까?
연결을 위해 대괄호 또는 이중 대괄호가 필요한 사용 사례가 있습니까?
명령 확장은 언제 필요합니까? 함수를 호출하기 위해 산술 확장이 필요한 경우도 있나요?
답변1
true/success 매개변수가 0이고 기타 false/failure 매개변수가 있는 내장 함수를 [
사용하여 함수가 다른 모든 명령(이 명령어 포함)과 마찬가지로 종료 상태로 성공/실패 true/false를 반환하도록 하려고 합니다 . 또는 return
함수에 의해 실행된 마지막 명령의 종료만 반환됩니다.
isnewer() {
[ "$1" -nt "$2" ]
# here returns with the status of the [ command
}
isvowel() {
case $1 in
([aeiouAEIOU]) true;; # or return 0
(*) false;; # or return 1
esac
}
이 명령은 복합 명령의 종료 상태를 반환하며 case
, 그 자체는 그 안에서 실행된 마지막 명령(따라서 여기의 명령 true
또는 false
명령의 종료 상태)을 반환합니다.
if
그런 다음 / 문 에서 명령 while
이 아닌 다음 함수를 호출합니다 [
.
if isnewer /etc/passwd /etc/shadow; then
echo passwd newer than shadow
fi
if isvowel "$x" || isvowel "$y"; then...
이중 중괄호 또는 이중 중괄호에 대한 (명확하게 알지 못함) while [
은 일반 명령( test
해당 명령의 다른 이름)일 뿐이며 Korn 쉘 및 일부 파생 항목은 다음과 같습니다 bash
.
(( arithmetic expression ))
산술 표현식(C와 유사한 구문을 따르며 쉘마다 다름)을 평가하고 결과 숫자가 0이 아닌 경우 true/성공(평소와 같이 종료 상태가 0임)을 반환하는 구문입니다 . 산술 표현식 구문에는 C와 유사한 비교 및 부울 연산자(<
,>=
,||
,&&
...)가 있습니다.- 조건식을 평가하는 구문입니다(쉘마다 다르며 해당
[[ conditional expression ]]
인수가 구문 분석되는 방식을 연상시키는 자체 구문을 사용함). /command와 같은 이 구문은 다음과 같은 많은 테스트 또는 비교를 수행하는 데 사용할 수 있습니다. 위의 문자열 또는 짝수.[
[
test
-nt
그러나 Bash에는 이중 대괄호 연산자가 없습니다.