curl&jq 有意思的小功能
前段时间成功把笔记本上多余的”小爱键”映射出来了(参考),正想着该用这个按键干些什么,然后无意见翻出了在收藏夹里面的hitokoto
,就写了这一个好玩的功能
1 |
|
1 |
|
虽然实现简单,但也很好玩
jq的字符串插值
其中jq的字符串插值部分写了很久,这里简单分析一下
外层的单引号 (
'...'
):- 这是给 Shell 看的。
- 在 Shell 中,单引号内的所有字符都会被视为字面量(Literal characters),Shell 不会对它们进行任何解释或替换。这意味着
$
,\
,(
等特殊字符在单引号内都会失去它们的特殊含义。 - 目的:确保
jq
程序接收到的参数完全是"\(.hitokoto)\n—— 《\(.from)》"
这一整个字符串,防止 Shell 试图解释里面的\
或()
等。
内层的双引号 (
"..."
):- 这是给
jq
程序看的。 - 在
jq
的语法中,双引号用来定义一个字符串字面量。 - 目的:告诉
jq
我们想要构造一个字符串。
- 这是给
字符串插值 (
\(...)
):- 这是
jq
的一个特性,叫做字符串插值(String Interpolation)。 - 它允许你在一个
jq
的字符串字面量(由双引号包围)中嵌入jq
表达式的结果。 \.hitokoto
&\.from
:这是一个jq
表达式,用于从输入的 JSON 对象中提取hitokoto
和from
字段的值。—— 《 》
:这些是普通的文本字符,会原样出现在最终的字符串里。
- 这是
The End
虽然你可能听过很多次了,但是我再一次感受到了Linux的伟大而美妙的设计哲学:Do One Thing and Do It Well!
,就像一个瑞士军刀,对每一件事情都有一样趁手的工具,利用管道,使用文本流作为通用接口,让这些工具能够协同工作,我要实现这么一个复杂的功能(从一言的接口获取json,并且作为一个通知发送出来),不需要繁琐的编程/查找api,只需要把手头上这些小型的工具像搭积木一样搭起来就好了
curl&jq 有意思的小功能
https://20040702.xyz/2025/04/10/jq/