如何修复 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
我有带 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