Linux Bash脚本:使用命令解析字符串而不执行它

Linux Bash脚本:使用命令解析字符串而不执行它,linux,bash,shell,Linux,Bash,Shell,我有一个在bash中解析xml的脚本。其中一个元素有问题,因为它包含一个字符串,其中包含一些命令: i、 e: 在不执行内部命令的情况下,如何将该字符串设置为变量(并打印它)?我最终在输出中得到了printf 谢谢 代码如下所示: while read line do if [[ $line == *"SITNAME"* ]] || [[ $line == *"TEXT"* ]] ; then flag=true fi if [ $flag= 'tr

我有一个在bash中解析xml的脚本。其中一个元素有问题,因为它包含一个字符串,其中包含一些命令: i、 e:

在不执行内部命令的情况下,如何将该字符串设置为变量(并打印它)?我最终在输出中得到了printf

谢谢

代码如下所示:

while read line
do

    if [[ $line == *"SITNAME"* ]] || [[ $line == *"TEXT"* ]] ; then
        flag=true
    fi


    if [ $flag= 'true' ]; then
        echo "$line"
        writeLine=$writeLine';'"$line"               
    fi


done < file.text

echo $writeLine >> report.out
writeLine=""
flag=false
读取行时
做
如果[[$line==*“SITNAME”*]| |[[$line==*“TEXT”*]];然后
flag=true
fi
如果[$flag='true'];然后
回音“$line”
writeLine=$writeLine';'“$line”
fi
完成>report.out
writeLine=“”
flag=false
回波上的输出

<![CDATA[/usr/bin/printf "%b" "***** MONITORING  ***** nn Notification Type: Critical n  Host:  &{INTERNETMANAGED_URL00.URL}   n  Stat: &{INTERNETMANAGED_URL00.Status}    n Time:    &{INTERNETMANAGED_URL00.Status_Timestamp}    Format: cyymmddhhmmssttt n Contact to:APPSRV  "|/usr/bin/mail mail@mail.com  -r "MONITORING" -s "**  MONITORING - Server URL -Critical  **"]]>

文件上的输出

<![CDATA[/usr/bin/printf "%b" "***** MONITORING file1.txt readme.txt file.xml script.sh nn Notification Type: Critical n Host: &{INTERNETMANAGED_URL00.URL} n Stat: &{INTERNETMANAGED_URL00.Status} n Time: &{INTERNETMANAGED_URL00.Status_Timestamp} Format: cyymmddhhmmssttt n Contact to:APPSRV "|/usr/bin/mail mail@mail.com -r "MONITORING" -s "** MONITORING - Server URL -Critical **"]]>

这起作用了:

writeLine=“$writeLine”;”“$line”

echo“$writeLine”>>report.out


谢谢大家抽出时间

您的
bash
代码是什么样子的?通常,仅仅读取文本并将其分配给变量不应该执行任何命令。谢谢该代码中的任何内容都不会执行从
file.txt
读取的命令。您的目的是只包括包含“SITNAME”或“TEXT”的行,还是包含“SITNAME”或“TEXT”的行之后的每一行?过滤器是有意的。如果我这样做:echo“$line”writeLine=$writeLine';”“$line”我在控制台中得到的输出很好,但当我检查report.out时,它在文本中有printf的输出。问题是,因为您没有引用
$writeline
,所以星号被处理为全局,已扩展到当前目录中的文件。无需在
writeLine=“$writeLine”;”中引用
$writeLine
$line
“$line”
,因为在变量分配中不执行路径名扩展。然而,作为
,作业可以简化为
writeLine=$writeLine”;“$line
writeLine=“$writeLine;$line”
<![CDATA[/usr/bin/printf "%b" "***** MONITORING file1.txt readme.txt file.xml script.sh nn Notification Type: Critical n Host: &{INTERNETMANAGED_URL00.URL} n Stat: &{INTERNETMANAGED_URL00.Status} n Time: &{INTERNETMANAGED_URL00.Status_Timestamp} Format: cyymmddhhmmssttt n Contact to:APPSRV "|/usr/bin/mail mail@mail.com -r "MONITORING" -s "** MONITORING - Server URL -Critical **"]]>