首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >连接bash中的变量(Debian)

问连接bash中的变量(Debian)
EN

Stack Overflow用户
提问于 2013-02-01 05:03:45
回答 2查看 952关注 0票数 1

我已经看到了许多连接变量的方法,但它们并不像我期望的那样工作,也不确定为什么……

我正在将一个txt文件读入一个数组,每一行都是一个域名,我想做一个区域复制输出到一个文件名为domain.zone simple right的文件。

好的,好的,这是我推荐的脚本,实际的挖掘部分

代码语言:javascript
复制
#!/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个字符,有人能解释一下我做错了什么吗?我想一定是和句号有关,但还没弄清楚。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-02-01 05:38:33

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

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

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

票数 8
EN

Stack Overflow用户

发布于 2013-02-01 05:55:12

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

代码语言:javascript
复制
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
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14635108

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档