在bash脚本中管道到egrep并保存到变量

Wol*_*one 0 bash

我是bash脚本的新手,并且我正在尝试编写一个bash脚本的一些问题.请参阅以下代码段:

#!/bin/bash                                                                    
year=`date +'%Y'`                                                                                                                                     
holidaysXML=$(curl -H "Accept: application/xml" -H "Content-Type: application/xml" -X GET \http://www.spiketime.de/feiertagapi/feiertage/$year | xmllint --format -)                                                
echo "$holidaysXML" | egrep "[0-9]{4}-[0-9]{2}-[0-9]{2}|>RP<"
Run Code Online (Sandbox Code Playgroud)

在这种形式中,echo所打印的内容与预期的一样,但是当我尝试将结果安全地保存到变量端回显变量时,似乎不执行egrep-part或根本不执行任何操作.

在阅读了一些其他主题之后,我已经尝试了以下内容:

test=$( "$holidaysXML" | egrep "[0-9]{4}-[0-9]{2}-[0-9]{2}|>RP<" )
Run Code Online (Sandbox Code Playgroud)

要么

test=`"$holidaysXML" | egrep "[0-9]{4}-[0-9]{2}-[0-9]{2}|>RP<"`
Run Code Online (Sandbox Code Playgroud)

两者都没有给出预期的结果(与第一个代码片段不同).谢谢你的任何建议.

Soc*_*owi 6

写作时

"$holidaysXML" | egrep ...
Run Code Online (Sandbox Code Playgroud)

$holidaysXML被解释为命令.最有可能的是,您的系统上没有这样的命令,因此没有可以发送的输出egrep.要发送的值$holidaysXMLegrep要么使用

echo "$holidaysXML" | egrep ...
Run Code Online (Sandbox Code Playgroud)

要么

printf '%s\n' "$holidaysXML" | egrep ...
Run Code Online (Sandbox Code Playgroud)

要么

egrep ... <<< "$holidaysXML"
Run Code Online (Sandbox Code Playgroud)

建议使用最后一个版本bash.对于可移植脚本,使用printf(对于不同的shell,echo 行为 不同).

要保存输出,请将所有内容放入$(...):

myVariable="$(egrep ... <<< "$holidaysXML")"
Run Code Online (Sandbox Code Playgroud)