微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

bash – If条件下不区分大小写的比较

我有这个csv文件,我需要计算满足行条目在特定年份范围之间并且artist_name匹配name参数的条件的行数.但字符串匹配应该不区分大小写.我如何在if循环中实现它..

我是初学者,所以请耐心等待

#!/bin/bash

file="$1"
artist="$2" 
from_year="$(($3-1))"
to_year="$(($4+1))"
count=0

while IFS="," read arr1 arr2 arr3 arr4 arr5 arr6 arr7 arr8 arr9 arr10 arr11 ; do

if [[ $arr11 -gt $from_year ]] && [[ $arr11 -lt $to_year ]] && [[ $arr7  =~ $artist ]]; then
count=$((count+1))
fi

done < "$file"
echo $count

$arr7 =〜$艺术家部分是我需要进行修改的地方

解决方法

bash case-transformations(${var,}和${var ^^})是在bash版本4中引入的(前一段时间).但是,如果你使用的是Mac OS X,那么你很可能有bash v3.2这本身并没有实现案例转换.

在这种情况下,您可以使用tr进行低效率的比较,并使用tr进行更多的输入:

if [[ $(tr "[:upper:]" "[:lower:]" <<<"$arr7") = $(tr "[:upper:]" "[:lower:]" <<<"$artist") ]]; then
  # ...
fi

顺便说一句,=〜做正则表达式比较,而不是字符串比较.你几乎肯定想要=.另外,您可以使用算术复合命令代替[[$x -lt $y]] :((x )).>

转载注明原文:bash – If条件下不区分大小写的比较 - 代码日志

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐