我有一个 .txt 文件,其中有整数值写在它与“;“分隔符。
117;92;16;20;
我需要比较这些,并选择最高的一个。
我的代码:
IFS=';' #Internat Field Separator
read -ra vector<$file
max=$vector[0]
min=$vector[0]
for i in ${vector[@]}
do
if [[ $i > $max ]] ; then
max=$i
fi
if [[ $i < $min ]] ; then
min=$i
fi
done
echo "Max value is $max, minimal value is $min"
break
输出为:
最大值为92,最小值为16。
所以这当然是错误的。当我试着回应它时:
echo $value ( in a loop of course )
输出是
177[0] 92 16 25
为什么第一个字母显示为int[0]?因此,我无法比较它们。我什么都想不出来...
1条答案
按热度按时间hmmo2u0o1#
尾随的
[0]
是由于在参数扩展中没有使用花括号造成的。无论如何,除了清晰之外,没有必要使用它们--如果vector
是一个数组,则引用$vector
将扩展第一个元素。这里最大的问题是
[[ $foo > $bar ]]
将这些值作为字符串进行比较,而不是作为数字进行比较,因此92
大于166
(因为它以9
而不是1
开头)。使用(( ))
输入数学上下文,其中<
和>
执行数值比较,$
符号是不必要的变量名称周围符号。