我想将逐字逐句的文本存储在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
}
询问函数可以查询模板函数,然后模板函数通过"逐字逐句"变量询问信息返回有关其自身的一些信息。询问功能解析这些信息。
在适当的时候,引号等特殊字符可能会存储在这些"逐字逐句"的变量中(例如,在自然语言中)。这些变量也可以用于构建代码文件,例如用于网页。使用这种方法的困难在于,cat可能在不同的分布中变化,并且由此产生的行为可能是不可预测的。从本质上讲,我希望对我的方法提出批评,并提出改进建议。也许一个改进是一个比本例中使用的cat更好的(最好是标准的)程序。
我非常感谢你的建议。
您可以使用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
可防止在文本中进行任何参数扩展。