curl命中后bash中未分配变量
我有一个shell脚本,其中有一条语句:curl命中后bash中未分配变量,bash,curl,sed,Bash,Curl,Sed,我有一个shell脚本,其中有一条语句: isPartial = $searchCurl| grep -Po '\"partialSearch\":(true|false)'|sed 's/\\\"partialSearch\\\"://' 现在,如果我只是回应RHS $searchCurl| grep -Po '\"partialSearch\":(true|false)'|sed 's/\\\"partialSearch\\\"://' 它会打印“partialSearch”:true
isPartial = $searchCurl| grep -Po '\"partialSearch\":(true|false)'|sed 's/\\\"partialSearch\\\"://'
现在,如果我只是回应RHS
$searchCurl| grep -Po '\"partialSearch\":(true|false)'|sed 's/\\\"partialSearch\\\"://'
它会打印“partialSearch”:true
,但变量isPartial
不会初始化
为什么会发生这种情况?我如何修复它?由于示例中反斜杠的数量不同,我不清楚输入文本中是否已经转义了双引号。我假设它们不是,即输入文本看起来像:
sometext... "partialSearch":true ... sometext...
..bla bla bla... "partialsearch":false ...
我下面的例子将在这个假设下工作
有几点需要说明
- 您似乎试图用正则表达式解析JSON输入。虽然这对于快速而肮脏的一次性工作是可以接受的,因为您知道正在处理的数据的确切格式,但一般来说,这是一个非常糟糕的主意。您应该使用JSON解析器,如
jq
- 显然,您在变量
中存储了一些bash代码。这被认为是不好的做法。您应该执行searchCurl
而不是函数searchCurl(){…code…}
,并调用searchCurl=“…code…”
,而不在它前面加上美元符号。变量代表值,函数代表代码searchCurl
- 在大多数情况下,如果要使用
,最好在不调用sed
的情况下对所有内容使用它。有时两者兼有可能更简单。请参见下面的示例grep
- 要将命令的输出指定给变量,必须使用命令替换
““partialSearch”:(true | false)
,这就是您想要的:
isPartial=$(searchCurl|sed -rn 's/^.*"partialSearch":(true|false).*$/\1/p')
如果您有更多的输入文本,并且输入文本是一个大的行,那么使用grep-o
可能会简化将输入拆分为每行一个匹配项的任务,以便
isPartial=$(searchCurl|grep -Po '"partialSearch":(true|false)'|sed -e 's/^.*://')
可能是您想要的(在本例中,isPartial
将包含一个以空格分隔的列表,其中包含true
和false
)。您想要的是:isPartial=$(…)
。