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
我可以使用 sed
或 cut
命令操作来做到这一点。但是我需要在这里了解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
仅在函数或源脚本中有效。
我有端口号文件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
我可以使用 sed
或 cut
命令操作来做到这一点。但是我需要在这里了解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
仅在函数或源脚本中有效。