如何修复 For 循环和 If 条件在 Bash 脚本中不起作用

How to fix For Loop and If condition NOT working in Bash Script

我有带 If 条件的 For 循环,但它不能正常工作。 它假设检查每个索引值,如果 < 255 显示有效,否则无效。 第三个和第四个不正确。

如何解决该问题?

listNumber=(25 255 34 55)
listLength=${#listNumber[@]}
isValid=0

for ((index=0; index<$listLength; index++)); do
    itemNumber="$((index+1))"
    
    if [[ ${listNumber[$index]} < 255 ]]; then
        echo -e "Item $itemNumber : ${listNumber[$index]} is Valid. \n"
        isValid=1
    else
        echo -e "Item $itemNumber : ${listNumber[$index]} is NOT Valid. \n"
    fi
done

Result:
Item 1 : 25 is Valid. 

Item 2 : 255 is NOT Valid. 

Item 3 : 34 is NOT Valid. 

Item 4 : 55 is NOT Valid. 

不幸的是,<[[...]] 内部使用时将使用字符串比较:

When used with [[, the ‘<’ and ‘>’ operators sort lexicographically using the current locale.

来源:https://www.gnu.org/software/bash/manual/bash.html#index-commands_002c-conditional

您可以使用适当的算术比较运算符,在本例中为 -lt

if [[ ${listNumber[$index]} -lt 255 ]]; then
fi

或者对条件使用算术上下文,使用双括号表示(类似于您编写 for 循环的方式):

if (( ${listNumber[$index]} < 255 )); then
fi