値にスペースが含まれる環境ファイルから変数をエクスポートする

値にスペースが含まれる環境ファイルから変数をエクスポートする

次のファイルがあるとしましょう.env

A=1
B=2
C="3 4 5"

私が実行した場合set -x; echo $(cat .env | xargs)

++ cat .env
++ xargs
+ echo A=1 B=2 C=3 4 5
A=1 B=2 C=3 4 5

私が実行した場合set -x; export $(cat .env | xargs)

++ cat /tmp/test.env
++ xargs
+ export A=1 B=2 C=3 4 5
+ A=1
+ B=2
+ C=3
bash: export: `4': not a valid identifier
bash: export: `5': not a valid identifier

Cその後、値の周りに引用符を保持または追加するためにいくつかの異なるトリックを試しました。

$ set -x; export $(cat /tmp/test.env | xargs printf %q)
+ set -x
++ cat /tmp/test.env
++ xargs printf %q
+ export ''\''A=1'\'''\''B=2'\'''\''C=3' 4 '5'\'''
bash: export: `'A=1''B=2''C=3': not a valid identifier
bash: export: `4': not a valid identifier
bash: export: `5'': not a valid identifier

何をしても、C値は常にスペースで分割されています。

編集:明確にするために.envファイルを素早く調達することに基づくソリューション(ほとんどのソリューションはファイルから変数をエクスポートするには?)ファイルに実行するコマンドとして解釈できる文字列が含まれている場合、それは非常に安全ではありません。私の環境ファイルをキー値データとして解釈したいだけです。

ベストアンサー1

あなたはそれを使用できますかparset

parset "`perl -nE '/[^=]+/ && print "$&,"' .env`" echo ::: "`perl -pe 's/[^=]+=//' .env`"

次のように入力をシームレスに処理できます。

vv=* ;   & " echo this is a value - not a command

おすすめ記事