正しいエスケープを使用して選択した環境変数をエクスポートする

正しいエスケープを使用して選択した環境変数をエクスポートする

ダッシュスクリプトに設定されたいくつかの環境変数をファイルにエクスポートしたいと思います。

myvariable="line 1

LINE=3
some characters: # \" \$
line 5"
myvariable2="abc"
export myvariable myvariable2

期待される結果(利用可能なスクリプト):

declare -x myvariable="line 1

LINE=3
some characters: # \" \$
line 5"
declare -x myvariable2="abc"

結果はexportこのコマンドを使用して得られます。ただし、すべての環境変数をエクスポートし、フィルタリングを許可するわけではありません。変数の複数行文字のため、結果を計算できませんgrep

これに対して、このprintenvコマンドは選択した変数のみを出力できますが、エスケープは考慮されず、このユースケースでは変数名は出力されません。

ベストアンサー1

またはzshyash

export -p myvariable myvariable2

期待どおりに動作します。

それ以外の場合でも、bash次のことができます。

for var in myvariable myvariable2; do
  printf 'export %s=%q\n' "$var" "${!var}"
done

POSIXlyでは、以下を使用して手動で参照できますawk

awk -v q="'" '
  function escape(v) {
    gsub(q, q "\\" q q, v)
    return q v q
  }
  BEGIN {
    for (i = 1; i < ARGC; i++)
      print "export " ARGV[i] "=" escape(ENVIRON[ARGV[i]])
  }' myvariable myvariable2

bash楽しみのためにいくつかのシェル(、、、、、、not zsh)で動作するハッキーソリューションです。mkshksh93yashdash

 (PS4=; set -x; export "myvariable=$myvariable") 2>&1

おすすめ記事