我有一个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]?因此我无法比较它们。我无法弄明白......
答案 0 :(得分:4)
您的跟踪[0]
是由于在参数扩展中未使用大括号造成的。无论如何,它们都不需要超出清晰度 - 如果$vector
是一个数组,则引用vector
扩展第一个元素。
这里最大的问题是[[ $foo > $bar ]]
将这些值比较为字符串,而不是数字,因此92
大于166
(因为它始于9
而不是1
)。使用(( ))
输入数学上下文,其中<
和>
执行数字比较,$
符号不必围绕变量名称。
#!/usr/bin/env bash
IFS=';' read -ra vector <"$file"
max=${vector[0]}
min=${vector[0]}
for i in "${vector[@]}"; do
(( i > max )) && max=$i
(( i < min )) && min=$i
done
echo "Max value is $max, minimal value is $min"