2013-01-31 52 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