如何为 env 文件中的每个值添加双引号

如何为 env 文件中的每个值添加双引号

我有一个 .env 文件,需要复制到 .env.sh 文件。该命令导出到 .env.sh 文件:

scriptPath=$(dirname "$(readlink -f "$0")")
printenv | sed 's/^\(.*\)$/export \1/g' > ${scriptPath}/.env.sh

我的 .env 文件:

DB_MYSQL_TYPE=mysql
DB_MYSQL_CONNECTOR=pymysql
DB_MYSQL_USER=tuandc
DB_MYSQL_PASS=mypass
DB_MYSQL_HOST=mysql.host
DB_MYSQL_PORT=3306
DB_MYSQL_DBNAME=vietnam

我已将其导出到 .env.sh:

export DB_MYSQL_TYPE=mysql
export DB_MYSQL_CONNECTOR=pymysql
export DB_MYSQL_USER=tuandc
export DB_MYSQL_PASS=mypass~.(?Tweg
export DB_MYSQL_HOST=mysql.host
export DB_MYSQL_PORT=3306
export DB_MYSQL_DBNAME=vietnam

但我想用双引号来转义 DB_MYSQL_PASS 中的一些特殊字符:

printenv | sed -e 's/=\(.*\)/="\1/g' -e 's/$/"/g' >> ${scriptPath}/.env.sh
DB_MYSQL_TYPE="mysql"
DB_MYSQL_CONNECTOR="pymysql"
DB_MYSQL_USER="tuandc"
DB_MYSQL_PASS="mypass~.(?Tweg"
DB_MYSQL_HOST="mysql.host"
DB_MYSQL_PORT="3306"
DB_MYSQL_DBNAME="vietnam"

但我想结合上面的 2 个正则表达式来使 .env.sh 文件完整,如下所示:

export DB_MYSQL_TYPE="mysql"
export DB_MYSQL_CONNECTOR="pymysql"
export DB_MYSQL_USER="tuandc"
export DB_MYSQL_PASS="mypass~.(?Tweg"
export DB_MYSQL_HOST="mysql.host"
export DB_MYSQL_PORT="3306"
export DB_MYSQL_DBNAME="vietnam"

答案1

$ declare -px

declare是一个看起来合适的 Bash 内置命令。此命令对现有变量分配中的 shell 特殊字符进行转义。

答案2

sed使用流编辑器可以轻松完成:

sed -i.bak -e `s/=/="/;s/$/"/` .env.sh 

这会:

  • -i.bak- 就地编辑,原始文件保留为.env.sh.bak.
  • s/=/="/-=用。。。来代替 ” ="”。
  • ;- 命令分隔符
  • s/$/"/- 匹配行尾并添加引号。

man sed

答案3

在一个阶段中进行。与原始文件(.env):

printenv | sed 's/\(^[^=]*\)=\(.*\)/export \1="\2"/' > "$scriptPath/.env.sh"

答案4

谢谢你们,我找到了连接 2 个正则表达式的解决方案,

printenv | sed -e 's/^\(.*\)$/export \1/g' -e 's/=\(.*\)/="\1/g' -e 's/$/"/g' >> ${scriptPath}/.env.sh

相关内容