bash.将文件分解为行,然后按第一个相等的符号打破.处理未播放的字符



我有一个通常用于设置环境变量的环境文件,但是我们正在稍微切换齿轮,现在想使用该env文件从中创建多个文件。

我的env文件的行看起来像这样:

MAIL_SETTINGS={"service": "service", "auth": { "user": "example.com", "pass": "pass=something"}}

我想通过第一个相等的符号吐出每条线,并具有两个变量。 MAIL_SETTINGS{"service": "service", "auth": { "user": "example.com", "pass": "pass=something"}}

我已经尝试了几件事,但是请继续空着。

for line in $(cat .env | grep -v ^#); do
  start=$(echo "$line" |cut -d"=" -f1)
  end=$(echo "$line" |cut -d"=" -f2)
  echo "$start = $end"
done

几个问题。

  • 如果有多个相等的迹象,它似乎都会破坏每个迹象
  • {(例如CC_3)的未阐明字符仅分为多行。

如何处理特殊字符,仅在第一个等号上分开?

谢谢!

for line in $(cat .env | grep -v ^#)将在空格上的输入中分开每行,因此它根本无法工作。您需要使用while循环读取行。

不要使用cut分开行。您可以使用参数扩展

提取第一个=符号的左右部分
  • 在第一个=之后砍下所有内容来获取名称
  • 通过砍掉所有内容,直到第一个=
  • 来获取价值

这样:

while read -r line; do
  name=${line%%=*}
  value=${line#*=}
  echo "$value" > "$name"
done < <(grep -v '^#' .env)

最新更新