0

私は bash スクリプトを書いていて、awk 呼び出しに渡したい変数がいくつかあります。ターミナルは、「awk: line 1: syntax error at or near <」というメッセージで応答します。これに似た別の変数が異なります。これが失敗するかどうかはわかりませんが、他の変数は問題ありません

失敗する変数は次のとおりです。

helpInsert="\
\t<help name=\"vsss.status\"><![CDATA[Displays the active configuration.]]></help>\n\
\t<help name=\"vsss.general\"><![CDATA[Allows configuration of general video server parameters. <br />\n\
\t\tPressing restore defaults will reset the working configuration, but will not affect the active configuration. <br />\n\
\t\tPressing activate will make your working configuration into the active configuration. ]]></help>\n\
\t<help name=\"vsss.conf2\"><![CDATA[Allows editing of the working configuration. <br />\n\
\t\tSettings are not saved unless submit button is pressed]]></help>\
"

以下は、渡される変数のサンプルです。残りは同様です。

menuInsert="\
\t<subpageLvl1>\n\
\t\t<name>VSSS</name>\n\
\t\t<php></php>\n\
\t\t<login>0</login>\n\
\t\t<subpagesLvl2>\n\
\t\t\t<subpageLvl2>\n\
\t\t\t\t<name>Status</name>\n\
\t\t\t\t<php>vsss.status</php>\n\
\t\t\t\t<xml>vsss.xml</xml>\n\
\t\t\t\t<xsd>vsss.xsd</xsd>\n\
\t\t\t\t<login>0</login>\n\
\t\t\t</subpageLvl2>\n\
\t</subpageLvl1>\
"

そして、ここに呼び出しがあります:

awk -v appName=$appName -v insert=$helpInsert 'awk script here' filename

問題は awk スクリプトではなく変数にあることを知っています。どこかで逃げ場を逃しているのかもしれませんが、見つけられないようです。誰でも問題を解決するのを手伝ってもらえますか?

4

1 に答える 1

1

シェルによる展開から変数を保護するには、二重引用符を使用する必要があります。

awk -v appName="$appName" -v insert="$helpInsert" 'awk script here' filename
于 2013-03-29T15:08:44.500 に答える