我已经看到了许多连接变量的方法,但它们并不像我期望的那样工作,也不确定为什么……
我正在将一个txt文件读入一个数组,每一行都是一个域名,我想做一个区域复制输出到一个文件名为domain.zone simple right的文件。
好的,好的,这是我推荐的脚本,实际的挖掘部分
#!/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个字符,有人能解释一下我做错了什么吗?我想一定是和句号有关,但还没弄清楚。
发布于 2013-02-01 05:38:33
当你注意到一个较短的字符串“覆盖”了一个较长字符串的开头时,首先要想到的应该是CR字符(用于Windows和Mac的行尾)。命令替换会删除换行符,但会删除Unix换行符(LF),并且不会对回车符做任何操作。
您可以通过tr -d '\r'过滤输入以消除回车符,或者使用dos2unix实用程序就地转换损坏的文件。
使用less -U查看输出有助于调试此类问题(less -U将回车符、制表符和退格符显示为控制字符,如^M ^I ^H)。
发布于 2013-02-01 05:55:12
您可以向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
donehttps://stackoverflow.com/questions/14635108
复制相似问题