cli和脚本中的grep行为有所不同

时间:2013-10-18 14:45:51

标签: bash grep

我有一个网络服务器,其中包含一堆具有不同名称服务器的域名,我正在尝试清理这些混乱。我正在尝试获取域名及其名称服务器的列表。我已经编写了这个简单的脚本,它几乎可以工作:

#!/bin/bash
for f in `cat mydomains.txt`
do
    echo $f " " >> mydns.txt
    dig ns $f | grep '^$f' | cut -d $'\t' -f 5 >> mydns.txt
    echo "" >> mydns.txt
done

截至目前,所有这一切都是echo $f " " >> mydns.txt

如果我使用挖掘线并替换$f应该在命令行中的内容,我会得到预期的结果。但是,我的脚本中没有任何内容。我知道$f变量已填充,因为它在前一行中回显$f。为什么它在脚本中不起作用?

3 个答案:

答案 0 :(得分:2)

你是不是想要'^ $ f'?它应该是'^'“$ f”,即没有变量周围的刻度。它不会以这种方式扩展。

答案 1 :(得分:2)

单引号可防止shell扩展变量。你应该使用双引号:

dig ns "$f" | grep "^$f" | ...

请注意,我在$f调用中的dig周围使用了双引号。引用你的变量是很好的做法;有关详细信息,请参阅this other SO question

答案 2 :(得分:0)

它可能是Windows风格/ Unix风格的换行问题。将换行符转换为\ n而不是\ r \ n。

可能会有所帮助

您是否尝试过此处提出的dos2unix建议:grep fails inside bash script but works on command line

相关问题