我想在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可能在不同的分布之间变化,并且所得到的行为可能是不可预测的。基本上,我想批评我的方法和改进建议。在这种情况下,也许一个改进是比猫更好(最好是标准的)程序。
我非常感谢你的任何建议。
答案 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
会阻止文本中的任何参数扩展。