首页 > 解决方案 > 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 语句中没有问题。

标签: bashshell

解决方案


推荐阅读