Bash変数の拡張には中括弧が必要です。

Bash変数の拡張には中括弧が必要です。

${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コードを前処理することもできます。

おすすめ記事