存储在Bash变量中的逐字文本

时间:2012-12-04 14:47:47

标签: bash shell variables cat verbatim

我想在Bash变量中存储逐字文本。我有一个这里描述的方法,我想批评和建议改进这种方法。目前,具体应用是在shell脚本库中具有某种程度上自我记录的功能。这是我想到的那种功能:

templateFunction(){
################################################################################
interrogationInformation=$(cat << 2012-09-26T1909
    <class>
        setup
    </class>
    <description>
        This is a natural language description of this function.
    </description>
    <prerequisiteFunctions>
        myFunction1
        myFunction2
    </prerequisiteFunctions>
    <prerequisitePrograms>
        myProgram1
        myProgram2
    </prerequisitePrograms>
2012-09-26T1909
)
################################################################################
if [ "${1}" != "-interrogate" ]; then #interrogation
    echo "function template"
fi #interrogation
}

询问函数可以查询模板函数,然后模板函数通过'verbatim'变量interrogationInformation返回有关自身的一些信息。询问函数解析此信息。

在适当的时候,引号等特殊字符可能会存储在这些“逐字”变量中(例如,用自然语言)。这些变量也可用于构建代码文件,例如用于网页。使用这种方法的困难在于cat可能在不同的分布之间变化,并且所得到的行为可能是不可预测的。基本上,我想批评我的方法和改进建议。在这种情况下,也许一个改进是比猫更好(最好是标准的)程序。

我非常感谢你的任何建议。

1 个答案:

答案 0 :(得分:6)

您可以使用read代替cat,如下所示:

IFS= read -d '' interrogationInformation << "EOF"
    <class>
        setup
    </class>
    <description>
        This is a natural language description of this function.
    </description>
    <prerequisiteFunctions>
        myFunction1
        myFunction2
    </prerequisiteFunctions>
    <prerequisitePrograms>
        myProgram1
        myProgram2
    </prerequisitePrograms>
EOF

请注意,引用EOF会阻止文本中的任何参数扩展。