使用shell脚本创建.env文件-如何用逗号包装值?

使用shell脚本创建.env文件-如何用逗号包装值?,shell,sed,environment-variables,Shell,Sed,Environment Variables,我目前正在使用以下工具制作一个.env,以帮助我在使用docker>supervisor>cron时处理环境变量 printenv>/var/www/laravel.env 这将打印一个完美的列表(除了那些在…中有空格的问题) 我知道我可以使用sed在=符号处将它们分开,然后用语音标记将第二部分包装起来 例如 MY_VAR=“我的空间价值有效” 非常感谢您的帮助 无法使用printenv的输出可靠地重建所有可能环境变量的值。考虑这个输出: foo=bar baz=3 这是export fo

我目前正在使用以下工具制作一个
.env
,以帮助我在使用docker>supervisor>cron时处理环境变量

printenv>/var/www/laravel.env

这将打印一个完美的列表(除了那些在…中有空格的问题)

我知道我可以使用
sed
=
符号处将它们分开,然后用语音标记将第二部分包装起来

例如


MY_VAR=“我的空间价值有效”


非常感谢您的帮助

无法使用
printenv
的输出可靠地重建所有可能环境变量的值。考虑这个输出:

foo=bar
baz=3
这是
export foo=bar baz=3
export foo=$'bar\nbaz=3'
的结果吗?没有办法知道


事实上,我不知道有哪种可移植的方法可以复制任何有效的环境,以便重建它。我能想到的最接近的东西是
bash
,您可以使用
declare-px
生成输出,该输出可用作
命令的目标,以再现名称为有效标识符的值。

无法使用
printenv
的输出可靠地重建所有可能环境变量的值。考虑这个输出:

foo=bar
baz=3
这是
export foo=bar baz=3
export foo=$'bar\nbaz=3'
的结果吗?没有办法知道


事实上,我不知道有哪种可移植的方法可以复制任何有效的环境,以便重建它。我能想到的最接近的事情是在
bash
中,您可以使用
declare-px
生成输出,该输出可以用作
命令的目标,以复制名称为有效标识符的值。

这将起作用,除非值也包含
=/code>

printenv |awk -F"=" '{print $1"=""\""$2"\""}'

除非值也包含
=

printenv |awk -F"=" '{print $1"=""\""$2"\""}'
对于sed:

printenv | sed 's/\([^=]*=\)\(.*\)/\1"\2"/'
对于sed:

printenv | sed 's/\([^=]*=\)\(.*\)/\1"\2"/'

这些只是我的web应用程序所需的静态值。它工作良好,除了它的空间。知道如何调整输出吗?这些只是我的web应用程序所需的静态值。它工作良好,除了它的空间。关于如何调整输出有什么想法吗?是否可以显示更大的输入和预期输出样本(以及您的空间问题是什么)是否可以显示更大的输入和预期输出样本(以及您的空间问题是什么)完美!,我对xpath非常熟悉。您的解决方案是否比
printenv | awk-F“=”{print$1”=“\”“$2”\”“}”好?
我看不出有什么区别:/poster提到,如果
=
中存在值(例如:
LS\u COLORS=“rs=0:di=01;34:
将输出
LS\u COLORS=“rs”
),此
awk
将不起作用。只是为了确认,您的将?是的,找到第一个
=
后的整个字符串将被引用。@s报告您的解决方案可以改进,以支持环境值中的双引号:
printenv|sed's/“/\\”/g'| sed's/\([^=]*=\(.\)/\1”\2“/”
完美!,我对xpath非常熟悉。您的解决方案是否比
printenv | awk-F“=”{print$1”=“\”“$2”\”“}”好?
我看不出有什么区别:/poster提到,如果
=
中存在值(例如:
LS\u COLORS=“rs=0:di=01;34:
将输出
LS\u COLORS=“rs”
),此
awk
将不起作用。只是为了确认,您的将?是的,找到第一个
=
后的整个字符串将被引用。@s报告您的解决方案可以改进以支持env值中的双引号:
printenv|sed's/“/\\”/g';sed's/\([^=]*=\(.\)/\1“\2”/