${var}
bashに中括弧変数(例)のみを拡張し、一般変数(例:)を無視するようにするbashオプションや他の方法はありますか$var
?
更新 - 私が望む理由は次のとおりです。純粋なbashに残る必要がある比較的大きなプログラムは純粋なbashで書かれています(ほとんどのLinuxディストリビューションで実行するように設計されたインストーラなので、追加の依存関係を追加したくありません)。 Bashで書かれた非常にシンプルなテンプレートエンジンがあります。テンプレート解析コードは次のとおりです(すべて)。
function apply_template() {
local src=$1
local dst=$2
local code="
cat<<EOF
$(cat $src)
EOF
"
eval "$code" > $dst
}
非常にシンプルですが非常に効果的です。このコードで評価されたテンプレートは30個です。例は次のとおりです。
[ {
"host" : "${primary_node_ip}",
"access" : {
"type" : "ssh",
"user" : "${user}",
"key" : "id_rsa"
} ]
Bashは変数を値に置き換え、すべてが正常です。
nginx構成など、変数と見なすべきではない「$」記号がテンプレートに含まれていると問題が発生します。実際、これはnginx confという1つのテンプレートでのみ発生します。
完全な解決策は、私の "apply_template"関数でこのモードを有効にすることです(これまで私が知っている限りは存在しません)。
ベストアンサー1
いいえ、そこではありません。変数の拡張についてはマニュアルに記載されています。3.5.3 シェルパラメータの拡張
'$'文字は、パラメータ拡張、コマンド置換、または算術拡張を導入します。拡張するパラメータ名または記号は中括弧で囲むことができます。オプションとは何ですか?[...]
本当にこれが必要な場合
- 理由を説明してください。 (XY問題のようです。)
$
識別子の前のすべての項目をエスケープし、間に句読点を置かないようにbashコードを前処理することもできます。