我有一个通常用于设置环境变量的环境文件,但是我们正在稍微切换齿轮,现在想使用该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)