我正在使用保存在 .bashrc 中的导出变量(即今天和第二天的日期)来尝试在我正在抓取天气信息的网页中找到它们的匹配项。我必须用分隔符(破折号)保存日期变量,否则我无法将它们导出到脚本自动更新的 ~/.bashrc 中。问题是我试图从网页中匹配它们的日期有空格,而原始日期有破折号。
我在 ~/.bashrc 中的导出变量的示例:
export xdate=Fri-04-Oct
因此,如果我尝试匹配 10 月 4 日星期五,因为它显示在网页上,如下所示:
grep -F $(echo $xdate | tr '-' ' ') casablanca_info
我的结果仅在周五匹配,这就是为什么我使用 -F 来尝试匹配整个字符串。我是编程新手,我知道我可以像 grep -F 'Fri 04 Oct' 一样使用 grep ,不会出现任何问题,但当字符串位于变量中时,我无法匹配字符串,并且我删除了空格。
我还尝试将 $xdate 括在这样的引号中
grep -F $(echo "$xdate" | tr '-' ' ') casablanca_info
我尝试将其从 ~/.bashrc 中的保存方式更改为
export xdate='Fri-04-Oct'
强制搜索包括空格在内的整个字符串,我又回到只在结果中返回 Fri 的状态。
我从 shellcheck.net 收到的建议建议在 $xdate 周围加上引号,或者包含一个 shebang 指令,我尝试只是为了咯咯笑,但我一直在 bash shell 中直接测试它,以便在将代码存储在一个脚本。
您需要将命令替换放在引号中,这样它将成为单个参数:
grep -F "$(echo $xdate | tr '-' ' ')" casablanca_info
您也可以在变量中存储带空格的日期,只要引用它即可:
xdate='Fri 04 Oct'
grep -F "$xdate" casablanca_info
也不需要使用命令替换,可以使用shell内置的字符替换操作:
grep -F "${xdate//-/ }" casablanca_info