populateNumbersArray() {
declare -ai numbers
## error on the following line
while [ "$counter" -lt $numNumbers ] && [ -z ${numbers[$counter]} ] || [ "${numbers[$counter]}" -le 0 ]
do
read -p "Please enter number $counter (1 or bigger): " numbers[$counter]
if [ "${numbers[$counter]}" -le 0 ]
then
echo -e "\nIncorrect input. Please try again\n"
sleep 1
clear
else
setCounter
fi
done
printNumbers numbers[@];
}
我已尝试使用var名称等引用。代码仍然运行良好,但我想消除错误消息。
答案 0 :(得分:0)
您可能只需要在while循环之前初始化counter
的值(可能为零)。尽管unset变量和值为空字符串的变量之间几乎没有实际区别,但[
命令在处理各种比较运算符时不会将空字符串视为0(-lt
,-le
等。)
答案 1 :(得分:0)
[ -z $unquoted[variable ]
无法正常工作。
在这种情况下,它评估为[ -z ]
,与预期目标相反,它由测试[ '-z' ]
处理,然后作为[ -n '-z' ]
处理,测试从{{1}开始}是一个非零长度的字符串。
此时行中的最后一个测试将被评估为-z
,它在整数上下文中有一个空字符串并生成错误。
答案 2 :(得分:0)
由于Etan的三元评论,我解决了我的问题:
populateNumbersArray() {
declare -ai numbers
while [ "$counter" -lt $numNumbers ]
do
while [ -z "${numbers[$counter]}" ] || [ "${numbers[$counter]}" -le 0 ]
do
read -p "Please enter number $counter (1 or bigger): " numbers[$counter]
if [ "${numbers[$counter]}" -le 0 ]
then
echo -e "\nIncorrect input. Please try again\n"
sleep 1
clear
fi
done
setCounter
done
printNumbers numbers[@]
}