庆典。将文件分成行,然后按第一个等号分解。处理未转义的字符

时间:2017-12-04 19:30:05

标签: 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

一些问题。

  • 如果有多个等号,那么它们似乎都会打破
  • {这样未转义的字符只会分成多行。

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

谢谢!

1 个答案:

答案 0 :(得分:2)

for line in $(cat .env | grep -v ^#)会将输入中的每一行拆分为空格,因此它根本不会起作用。 您需要使用带有while的{​​{1}}循环读取行。

请勿使用read分割线条。 您可以使用参数展开提取第一个cut符号的左右部分:

  • 在第一个=
  • 之后砍掉所有内容,以获取名称
  • 通过砍掉所有内容直至第一个=
  • 获取价值

像这样:

=