在这方面需要一些帮助。因此,此命令有效并显示我想要的信息,即 Last-Modified 响应标头:
ubuntu:~$ curl -s -I "https://someurl/?someparam" | grep -Fi Last-Modified
返回:
**last-modified: Tue, 22 Mar 2022 17:33:35 GMT**
我想要做的是将其存储到一个变量中 - 说“Last-Mod”,然后将其与当前日期进行比较,看看内容是否在过去 1-2 天内刷新过(它是一个文件)。如果它已经刷新,那么我想继续下载它。我尝试过各种语法,例如:
Last-Mod="$(curl -s -I https://someurl/?parama=a¶mb=b | grep -Fi Last-Modified)"
但我不断收到错误。有什么指点吗?
谢谢,杰夫
答案1
正如评论中提到的,您的错误可能是由于&
您的网址中未加引号造成的。这将尝试将其之前的所有内容作为后台进程运行,然后尝试将其之后的所有内容作为新命令运行。
您需要引用 URL 或转义该 & 符号
Last-Mod="$(curl -s -I 'https://someurl/?parama=a¶mb=b' | grep -Fi Last-Modified)"
如果命令由控制运算符“&”终止,则 shell 会在子 shell 中异步执行该命令。这称为在后台执行命令,这些命令称为异步命令。 shell 不会等待命令完成,返回状态为 0 (true)。
答案2
bash 中的变量名不能包含连字符 ( -
),只能:
姓名
仅由字母、数字和下划线组成且以字母或下划线开头的单词。名称用作 shell 变量和函数名称。也称为标识符。
(从bash 的文档)。重命名Last-Mod
为Last_Mod
以使作业生效。