我是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)
两者都没有给出预期的结果(与第一个代码片段不同).谢谢你的任何建议.
写作时
"$holidaysXML" | egrep ...
Run Code Online (Sandbox Code Playgroud)
值$holidaysXML被解释为命令.最有可能的是,您的系统上没有这样的命令,因此没有可以发送的输出egrep.要发送的值$holidaysXML来egrep要么使用
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)