Больше чем сравнение дает противоречивые результаты в Bash - PullRequest
0 голосов
/ 27 февраля 2019

Этот скрипт, кажется, дает противоречивые результаты.Например, когда оператор if видит свою первую строку, которая больше, он работает нормально.Но иногда более поздние строки большего размера полностью игнорируются:

ITEM[0]="XX"
ITEM[1]="XXXXXXX"
ITEM[2]="X"
ITEM[3]="XXXXXXXXXXXX"
ITEM[4]="XXXX"

SETPOINT=0
for i in "${!ITEM[@]}"; do
        STRING="${ITEM[$i]}"
        LENGTH=${#STRING}
        echo "String length = $LENGTH"
        if [ $LENGTH \> $SETPOINT ]; then
                SETPOINT=$LENGTH
                echo "Setpoint was updated to $SETPOINT"
        fi
        echo "Loop again"
done
echo "Final setpoint = $SETPOINT"

Вот пример выходных данных:

String length = 2
Setpoint was updated to 2
Loop again

String length = 7
Setpoint was updated to 7
Loop again

String length = 1
Loop again

String length = 12 <--- Why didn't it catch this one?????
Loop again

String length = 4
Loop again

Final setpoint = 7

Кроме того, изначально я пытался выполнить расширение переменной и строкусчитая внутри оператора if, поэтому мне не нужно было создавать "STRING" и "LENGTH", но я не мог понять синтаксис для расширения переменной массива и одновременного подсчета строки внутри if,Так что, если вы тоже подумали об этом, чтобы сократить код, это было бы удивительно!

Спасибо!

1 Ответ

0 голосов
/ 27 февраля 2019

Заменить \> на -gt.

man test объясняет, что:

 s1 > s2       True if string s1 comes after s2 based on the binary value of their characters.
 n1 -gt n2     True if the integer n1 is algebraically greater than the integer n2.
...