IFS 给出不正确的输出

IFS giving Incorrect output

我有端口号文件map.ini:

50051=1
50052=1
50053=1
50054=1
50055=1
50056=1

和一个脚本sample.sh,其内容是:

#!/bin/bash
file=map.ini

while IFS='=' read -r port varPortStatus
do
        if [[ $varPortStatus -eq "1" ]]; then
                printf "Available port is %s" $port
                printf "Status is %d." $varPortStatus.
                return 0
        fi
done < "$file"
echo "No port is available"

我需要的预期输出是:

Available port is 50051
Status is 1

我可以使用 sedcut 命令操作来做到这一点。但是我需要在这里了解IFS。我得到的输出为:

")syntax error: invalid arithmetic operator (error token is "
")syntax error: invalid arithmetic operator (error token is "
")syntax error: invalid arithmetic operator (error token is "
")syntax error: invalid arithmetic operator (error token is "
")syntax error: invalid arithmetic operator (error token is "
")syntax error: invalid arithmetic operator (error token is "
No port is available

请告诉我哪里做错了?

从输出看来可能有一条以 \r 结尾的 dos 行在 map.ini 或 sample.sh 中,尝试 dos2unix map.ini,或 cat -ve map.ini 到验证。

如果无法修改输入文件\r 可以在bash

中删除字符
while IFS='=' read -r port varPortStatus
do
    varPortStatus=${varPortStatus%$'\r'}
    if [[ $varPortStatus -eq "1" ]]; then
            printf "Available port is %s\n" $port
            printf "Status is %d.\n" $varPortStatus
    fi
done < "$file"

注意还修复了添加到格式中的 \n$varPortStatus 后删除的 .return 仅在函数或源脚本中有效。