2013-01-31 32 views
1

我已经看到了多种方式如何串联的变量应该工作,但他们不工作如何我会期望和不知道为什么...
我正在阅读一个txt文件到一个数组 每一行都是一个域名,我想做一个区域传输输出,以一个文件名为domain.zone的文件简单正确....
在bash(debian)中连接变量

好吧这里是脚本我已经指出了实际挖部分

#!/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 

当我运行上面的脚本,如果doma inname它正在研究为domain.com 我所得到的输出是: .zonen.com

预计产量将domain.com.zone
变量n(5个charaters)的内容覆盖第一5个字符的变量t 有人可以解释我在做什么错误我认为它必须与时期有关,但一直没能弄清楚。

+1

也许你有你的文本文件'CR'字符? (Windows或Mac行结尾) –

+0

这绝对听起来像这个问题。您应该将其作为答案发布。 –

+0

使用'filecontent =($(cat goodFvzones.txt | tr -d'\ r'))'等待@AntonKovalenko建议作为答案。 –

回答

8

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

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

less -U查看您的输出,可用于调试这种问题的有用(less -U表示回车,制表符和退格键作为控制字符,如^M^I^H)。

+0

+1拯救了我的生命!那么,我的剧本真的。 –

0

您可以添加一个回车(\ r)的,以IFS让它只是一个空白字符参数解析目的:

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