Bash에서 <=
, >=
및 사용 방법은 무엇입니까 >
?<
바꾸다:
if [[ $arg1 -ge $num1 && $arg2 -le $num2 ]]; then
...
fi
다음과 같은 것들이 더 있습니다:
if [[ $arg1 >= $num1 && $arg2 <= $num2 ]]; then
...
fi
답변1
구체적으로 bash
:
((arg1 >= num1))
(에서 상속됨ksh
) 산술 비교를 수행합니다.arg1
이는num1
동일한 이름을 가진 쉘 변수를 참조합니다. 각 변수는 산술 확장으로 해석되고 결과가 대체됩니다. 여기서$arg1
is010
와$num1
is 이면4+5
결과는 다음과 같습니다.잘못된(((...))
명령은 0이 아닌 종료 상태로 반환됩니다.)010
8은 8진수이고4+5
9는 8진수이기 때문입니다.(($arg1 >= $num1))
: 전체 산술 표현식이 평가되기 전에$arg1
및 가 확장된다는 점을 제외하면 위와 동일합니다 . was 및 was$num1
인 경우 및 자체가 유효한 표현식이 아니기 때문에 이전 명령이 실패합니다 . 하지만 여기서는 산술 표현식이 평가되므로 성공할 것입니다 . 일반적으로 산술식에서 는 생략하는 것이 가장 좋습니다. 예를 들어 .$arg1
(2
$num1
2)
(2
2)
(2 >= 2)
$
a=2+2; echo "$((3 * $a))"
a=2+2; echo "$((3 * a))"
let "..."
(또한 ksh에서). 이와 동일합니다. 단,((...))
일반 명령으로 구문 분석된다는 점만 제외하면 읽기 어렵고 이식성이 떨어지며 인용에 더 주의를 기울여야 합니다.[ "$arg1" -ge "$num1" ]
. 이것은 표준적이고 휴대 가능합니다. 10진수 상수만 지원됩니다.[ 010 -ge 9 ]
동일합니다[ 10 -ge 9 ]
.[[ $arg1 -ge $num1 ]]
. ksh에서도 사용되지만 큰 차이점이 있습니다. 이번에는 ,$arg1
및 가$num1
소수 상수가 아닌 산술식으로 처리됩니다.[[ 010 -ge 9 ]]
다시 false를 반환합니다.[[ $arg1 < $num1 ]]
. 문자열 비교. 문자열을 비교하는 데 사용되므로strcoll()
로케일의 정렬 알고리즘을 사용합니다. 정렬 알고리즘을 사용하는<
경우 / 는 바이트 간 비교를 수행하므로 및 /가 false를 반환하는 모든 문자열 쌍이 있을 수 있습니다 . 지원되지 않습니다.>
=
==
<
>
=
==
<=
>=
[ "$arg1" "<" "$num1" ]
. 비표준. 위와 동일하지만[
명령을 사용합니다.<
리디렉션 연산자로 처리되지 않도록 인용해야 합니다.expr " $arg1" "<=" " $num1" > /dev/null
expr
(어휘 비교를 강제하고 연산자처럼 보이는 문자열 문제를 방지하려면 공백을 포함하십시오 .) 또는awk 'BEGIN{exit(!(""ARGV[1] <= ""ARGV[2]))}' "$arg1" "$num1"
를 사용하십시오strcoll()
.
답변2
이러한 연산자는 예 (( ... ))
및 $(( ... ))
(산술 평가그리고산술 확장각기):
if (( arg1 >= num1 )) && (( arg2 <= num2 )); then
...
fi
또한 let
다음은 위와 동일합니다.
if let "arg1 >= num1" && let "arg2 <= num2"; then
...
fi
Bash 매뉴얼의 "산술 평가" 섹션을 참조하세요.