首页 > 解决方案 > 循环内的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

为什么只有最后一行是匹配的?有空格或换行问题吗?建议我一些解决方案

标签: linuxbashshell

解决方案


您的文件以“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"

推荐阅读