">"와 "-gt"의 차이점

">"와 "-gt"의 차이점

이들의 차이점은 무엇입니까?

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 \< 10but expr a9 \> a10.
² 문자열이 바이트 문자열로 해석되는지 아니면 현재 로케일의 문자열로 해석되는지는 셸에 따라 다릅니다.

관련 정보