이들의 차이점은 무엇입니까?
SEC=$(mysql -hxxx -Pxxx -uxxx -pxxx -se "SELECT Seconds FROM tablename")
SEC=100
둘 다 동일한 결과(100)를 반환합니다. 하지만 테스트해 보면 다음과 같습니다.
if [ ${SEC} > 1 ]
then
echo "SEC GT 1"
else
echo "SEC LT 1"
fi
첫 번째는 다음을 반환합니다.
"SEC GT 1"
두 번째는 다음을 반환합니다.
"SEC LT 1"
그러나 다음과 같이 변경하면:
if [ ${SEC} -gt 1 ]
그러면 결과는 반대가 됩니다.
나는 그것이 데이터 유형과 관련이 있다고 가정하고 있으며 아마도 cast
동일한 결과를 얻으려면 그 중 하나가 필요할 것입니다.
IF
매번 해당 섹션을 변경 해야 한다는 것을 기억해야 하기 때문에 현재 테스트가 엉망입니다 .
답변1
처음 에는 끝에 추가 매개변수가 필요하다는 점을 제외하면 [
다른 명령과 마찬가지로 일반 명령으로 구현되었습니다 . (여전히 일반 명령으로 존재하지만 대부분의 쉘에도 내장되어 있습니다.) 일반 구문 분석이 적용되는 일반 명령이므로 수학 연산자를 사용할 수 없으며 따옴표가 없습니다. 리디렉션 연산자를 포함하면 다음과 같습니다. , 명령의 (빈) 출력을 이름이 지정된 명령으로 리디렉션합니다 . 명령은 대부분 대시로 시작하는 특수 옵션의 일반적인 규칙을 따릅니다. 대부분의 연산자는 대시로 시작합니다. 따라서 파일을 읽을 수 있는지 테스트하고, 두 테스트를 "and" 연산자로 결합하고, 합계 가 같은지 테스트하는 등의 작업이 필요합니다 .test
[
]
<
>
[ ${SEC} > 1 ]
[ ${SEC} ] >1
[
1
[
[ -r foo ]
[ -r foo -a -w bar ]
[ $x -eq $y ]
$x
$y
이러한 오래된 쉘에는 문자열 동일성( =
대시 문자 규칙에서 벗어난 몇 안되는 연산자 중 하나)이 있었지만 문자열 순서는 없습니다. 그러나 [ $x -le $y ]
정수가 $x
작거나 같은지 테스트하는 것과 같은 수치 비교를 수행하며 앞에 0이 있으면 숫자가 8진수임을 의미하므로 $y
이 연산자 세트에는 수치 동등성이 포함됩니다 [ $x -eq $y ]
.[ 010 -eq 8 ]
[[ … ]]
Ksh는 이제 bash 및 zsh에서도 사용할 수 있는 구문을 도입했습니다 . 와 달리 쉘의 파서가 인식하는 [ … ]
일반 명령이므로 특수 문자(예: 및 )를 따옴표 없이 [[ … ]]
내부적으로 사용할 수 있습니다 (실제로는 따옴표로 묶을 수 없습니다). 이후 및 친구는 이미 숫자 비교 및 문자열 비교에 사용할 수 있으며 친구는 문자열 비교 연산자(사전순 1)로 만들어졌습니다. 예를 들어, 하지만 .(
<
-lt
=
<
[ 9 -lt 10 ]
[[ 10 < 9 ]]
1이 유틸리티는 문자열 정렬 기능을 제공하며 POSIX 셸 기능에 포함되지 않은 몇 가지 용도 중 하나 expr
입니다 . expr
그러나 expr
문자열과 숫자 비교에는 동일한 연산자가 사용되므로 expr 9 \< 10
but expr a9 \> a10
.
² 문자열이 바이트 문자열로 해석되는지 아니면 현재 로케일의 문자열로 해석되는지는 셸에 따라 다릅니다.