【发布时间】:2021-10-04 22:50:15
【问题描述】:
我有这个字符串:
address 0 address-set hostname-of-a-host
还有这个 grep 命令:
file=`/bin/grep -ilr ".*$host_name.*" /path/to/some/files/*
地点:
host_name=`echo $line | cut -d ' ' -f 4-`
我想获取 host_name 以及是否在包含它的路径文件中。
所以,这是代码:
line="address 0 address-set hostname-of-a-host"
host_name=`echo $line | cut -d ' ' -f 4-`
file=`/bin/grep -ilr ".*$host_name.*" /path/to/some/files/*
这些命令可以在 shell 中正常工作。但是,该脚本返回一个空的“文件”变量。我不知道为什么它们不能在脚本中工作,而是在 shell 中工作。
这是 bash 执行的输出(对不起,我必须修改:
root@cpm:/path/# line="address 0 address-set hostname"
root@cpm:/path/# host_name=`echo $line | cut -d ' ' -f 4-`
root@cpm:/path/# file=`/bin/grep -ilr ".*$host_name.*" /path/to/some/files/*
root@cpm:/path/# echo $file
/path/to/some/files/file1
【问题讨论】:
-
缺少一些结束的反引号。
-
我建议将
set -x放在脚本的问题部分之前,这样它会打印出正在发生的事情的痕迹(例如,host_name被设置为什么,正在传递给@ 987654329@ 等),看看它是否符合您的预期。注意:引用/转义看起来很奇怪是正常的,因为它可能会选择与您输入的内容不同(但等效)的引号/转义以获得相同的结果(请参阅this question)。但是如果 in 引号中的东西很奇怪,那会告诉你一些事情。 -
好的,这是一个非常简单但有用的想法。每行都有一个 \r,因此字符串不匹配。谢谢。