bash - 这种比较有什么问题,无法正确比较值?
问题描述
我正在尝试从元素列表中找到最旧的日期(以字符串格式)。我无法弄清楚为什么比较不起作用,导致发现的最旧日期始终是临时最旧日期,如下所示:
filedates=(20200110 20200120 20200219 20200220 20200420 20200422 20200110 20200120 20200219 20200220 20200420 20200422 20200219 20200220 20200420 20200422)
find_oldest_date (){
arr=("$@")
currentOldestDate=${arr[0]} # set a temporary oldest date
echo "Temporary oldest date: "$currentOldestDate
for date in "${arr[@]}"; do
currentDate=$date
if [[ "$currentDate" -lt "$currentOldestDate" ]]; then
oldestDateFound=$currentDate
else
oldestDateFound=$currentOldestDate
fi
done
echo "Oldest date found in directory: "$oldestDateFound
}
find_oldest_date "${filedates[@]}"
为了进行比较,我也尝试过:
if [[ "$currentDate" < "$currentOldestDate" ]]
或者只有单括号和双引号,或者双括号没有引号......
它要求将文件作为参数传递,而不是直接使用它
解决方案
你永远不会改变currentOldestDate
它的初始值 的值${arr[0]}
。因此,您报告的最后看到的日期小于${arr[0]}
,而不是看到的最旧日期。
find_oldest_date (){
arr=("$@")
oldestDateFound=${arr[0]}
echo "Temporary oldest date: "$oldestDateFound
for date in "${arr[@]}"; do
currentDate=$date
if [[ "$currentDate" -lt "$oldestDateFound" ]]; then
oldestDateFound=$currentDate
else
oldestDateFound=$currentOldestDate
fi
done
echo "Oldest date found in directory: "$oldestDateFound
}
您可以将其简化为
find_oldest_date () {
oldest=$1
shift
for current; do
[[ $current -lt $oldest ]] && current=$oldest
done
echo "Oldest date found in directory: $oldest"
}
推荐阅读
- java - 如何更改 ActionListener 的焦点 JButton 的默认键绑定?
- node.js - 如何在没有 process.env 的情况下获取环境变量
- android - 如何在每个新页面上创建可单击的 ListView 并在单击时打开 JSON 数据?
- apache-spark - 拆分RDD字符串并在一个语句中与其他RDD元素组合
- php - 如何验证输入是否为数字
- angular - 知道从哪个 html 调用组件
- json - 如何在 Azure Logic App 中从 blob json 创建 html 表
- eclipse - 文件上传的自动代码在 selenium 中不起作用。输入路径后 Windows 消失
- laravel - Laravel API 临时图像通过 url
- regex - 在python中使用正则表达式拆分