bash - bash 脚本 - 由读取行字段填充的 var,比较时,一个 var 的每个字符都已转义
问题描述
这不是一个非常明确的问题,因为要解释发生了什么并不容易。我正在浏览一个 DNS 区域文件并查找与文件中的内容不匹配的记录。我正在逐行读取文件,并将每一行分成其 2 个字段(主机名和 IP)。
我的问题是,当我进行比较时,从线路字段中提取的 IP 充满了转义。
#!/bin/bash -x
inFile='./testrecords'
while IFS=' ' read -r hostName fileIP
do
然后我做一些事情来从 AWS 获取实际的 IP 地址。问题出现在以下比较中:
if [[ "$actualIP" != "$fileIP" ]] ; then
echo "$hostName $fileIP" >> recordstodelete
gsed -i "/$hostName/d" $inFile
fi
这是结果(通过添加 -x 来跟踪脚本):
+ actualIP=10.238.4.234
]][ 10.238.4.234 != \1\0\.\2\3\8\.\4\.\2\3\4\
我试图通过 sed 传递该变量,以摆脱 \'s,但这没有效果。我已将比较中的括号更改为单括号(认为正则表达式扩展可能与它有关),这产生了不同但仍然不正确的输出:
if [ "$actualIP" != "$fileIP" ] ; then
echo "$hostName $fileIP" >> recordstodelete
gsed -i "/$hostName/d" $inFile
fi
产生:
+ actualIP=10.238.4.234
+ '[' 10.238.4.234 '!=' $'10.238.4.234\r' ']'
另一个奇怪的是 $fileIP 正确传递,在随后的 echo 语句中没有问题。