1

我已经看到了多种变量连接应该如何工作的方式,但它们没有按我的预期工作,也不知道为什么......
我正在将一个 txt 文件读入一个数组,每一行都是我想要做的域名区域传输输出到文件名为 domain.zone 简单权限的文件....

好的,这是我已经完成了实际挖掘部分的脚本

#!/bin/bash
filecontent=($(cat goodFvzones.txt))
for t in "${filecontent[@]}"
do
n=".zone"
x=$t$n
echo "$x"
#dig @dnsserver -t axfr $t > $x
done

当我运行上述脚本时,如果它正在处理的域名是 domain.com,我得到的输出是:.zonen.com

预期的输出将是 domain.com.zone
变量 n(5 个字符)的内容覆盖了变量 t 的前 5 个字符有人能解释我做错了什么吗?我认为它一定与期间有关,但还没有能够弄清楚。

4

2 回答 2

8

当您注意到较短的字符串“覆盖”了较长字符串的开头时,首先要考虑的应该是CR字符(用于 Windows 和 Mac 行尾)。命令替换会删除换行符,但它会删除Unix换行符 ( LF) 并且对回车没有任何作用。

您可以过滤输入tr -d '\r'以摆脱回车,或使用dos2unix实用程序就地转换损坏的文件。

查看输出less -U有助于调试此类问题(less -U将回车、制表符和退格显示为控制字符,如^M ^I ^H)。

于 2013-01-31T21:38:32.853 回答
0

您可以在 IFS 中添加回车符 (\r),使其成为另一个空格字符,用于参数解析:

IFS=$(printf "$IFS\r")
filecontent=($(cat goodFvzones.txt))
for t in "${filecontent[@]}"
do
  n=".zone"
  x=$t$n
  echo "$x"
  #dig @dnsserver -t axfr $t > $x
done
于 2013-01-31T21:55:12.303 回答