linux - 循环内的bash多个if语句不起作用
问题描述
我是 bash 脚本的新手,我有一个文件,我想检查每一行,但它不起作用。
我的 bach 脚本代码
declare -a arr
for (( i=0; i<${len}; i++ ))
do
if [[ ${arr[$i]} =~ ^[0-9]+$ ]]
then
echo ${arr[$i]}" numbr"
else
echo "No match"
fi
done
为什么只有最后一行是匹配的?有空格或换行问题吗?建议我一些解决方案
解决方案
您的文件以“DOS”格式保存,以 \r\n 行结尾。
转换为“unix”格式:
dos2unix file.txt
# or, if that's not installed
sed -i 's/\r$//' file.txt
切线,我发现 POSIX 字符类可以描述你想要匹配的内容:
[[ ${arr[$i]} =~ ^[[:digit:]]+$ ]] && echo "${arr[i]} numbr"
[[ ${arr[$i]} =~ ^[[:alpha:]]+$ ]] && echo "${arr[i]} ltr only"
[[ ${arr[$i]} =~ ^[[:alnum:]]+$ ]] && echo "${arr[i]} both"
推荐阅读
- ios - 如何按顺序链接 RxSwift Singles
- context-free-grammar - 描述 a、ab、abc、ac 的语言的上下文无关语法...?
- eclipse-emf - EMF:在 Ecore 元模型中定义通用包含引用
- java - java.lang.IllegalAccessError:类 lombok.javac.apt.LombokProcessor 无法访问类 com.sun.tools.javac.processing.JavacProcessingEnvironment
- woocommerce-rest-api - Woocommerce 自定义下订单 API 无法正常工作 购物车为空
- c - 计算字符串中的括号 - 装配
- excel-formula - 给定范围内的小数之和,忽略数组中的字符,Excel
- asp.net-mvc - 当 url 包含“-”时,IIS 托管应用程序会触发运行时错误
- ios - IOS xcode 11.7错误运行flutter build ios
- node.js - 如何在 Next.js 中利用查询和路由参数?