将解析的 Curl 输出存储到变量

将解析的 Curl 输出存储到变量

在这方面需要一些帮助。因此,此命令有效并显示我想要的信息,即 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&paramb=b | grep -Fi Last-Modified)"

但我不断收到错误。有什么指点吗?

谢谢,杰夫

答案1

正如评论中提到的,您的错误可能是由于&您的网址中未加引号造成的。这将尝试将其之前的所有内容作为后台进程运行,然后尝试将其之后的所有内容作为新命令运行。

您需要引用 URL 或转义该 & 符号

Last-Mod="$(curl -s -I 'https://someurl/?parama=a&paramb=b' | grep -Fi Last-Modified)"

3.2.4 命令列表

如果命令由控制运算符“&”终止,则 shell 会在子 shell 中异步执行该命令。这称为在后台执行命令,这些命令称为异步命令。 shell 不会等待命令完成,返回状态为 0 (true)。

答案2

bash 中的变量名不能包含连字符 ( -),只能:

姓名

仅由字母、数字和下划线组成且以字母或下划线开头的单词。名称用作 shell 变量和函数名称。也称为标识符。

(从bash 的文档)。重命名Last-ModLast_Mod以使作业生效。

相关内容