2

逐語的なテキストを Bash 変数に保存したいと考えています。ここで説明したアプローチがあり、このアプローチを改善するための批判と提案をお願いします。現在、特定のアプリケーションは、シェル スクリプト ライブラリ内に、ある程度自己文書化された機能を持つことになっています。これが私が考えている機能の種類です:

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 を介して自身に関する情報を返します。問い合わせ機能は、この情報を解析します。

いずれ、引用符などの特殊文字がこれらの「逐語的」変数に (たとえば、自然言語で) 格納される可能性があります。これらの変数は、Web ページなどのコード ファイルの構築にも使用できます。このアプローチを使用する際の難点は、 cat がディストリビューション間で異なる可能性があり、結果として生じる動作が予測不能になる可能性があることです。基本的に、私のアプローチに対する批判と改善のための提案をお願いします。おそらく 1 つの改善点は、この場合に使用されている cat よりも優れた (できれば標準的な) プログラムでしょう。

ご提案いただきありがとうございます。

4

1 に答える 1

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すると、テキスト内のパラメータ展開が妨げられることに注意してください。

于 2012-12-04T15:18:44.120 に答える