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

d3p*_*3pd 2 variables bash shell 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
}
Run Code Online (Sandbox Code Playgroud)

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

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

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

dog*_*ane 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
Run Code Online (Sandbox Code Playgroud)

请注意,引用EOF可防止文本中的任何参数扩展.