sh - 如何在文件中存储环境变量的值

问题描述 投票:0回答:1

我们有一个文件如下

kkkkk="vvvvv"

一个例子是

b="a=c ==\n=/n/ //a=\n:=dd"

文件名是 myfile,因此我通过运行将其分配给名为“filename”的变量

filename=myfile

我知道 kkkkk 中没有等号。所以我跑步

. "$filename"

将 vvvvv 的值赋给 env 中的 kkkkk

这是我实现的第一个目标。


我还有另一个目标。我想要一个名为 kkkkk 且内容为 vvvvv 的文件。如示例中所提供的,vvvvv 可以很复杂并包含任何字符。 所以我想要一个名为 b 的文件,其中包含内容

a=c ==\n=/n/ //a=\n:=dd

请注意,双引号不是文件内容的一部分


另一个例子

e="====a\\nn/ //a=\n:=dd"

我需要名为 e 的文件,其中包含 ====a n/ //a= :=dd

另一个例子

My-key="my-value"

我需要名为 my-key 且包含 my-value 的文件


总而言之,我想根据第一个 = 符号作为分隔符将 $filename 的内容剖析成 k 和 v,然后创建一个名为 k 的包含值 v 的文件

shell sh
1个回答
0
投票

仅靠

sh
是做不到的。

可以通过组合

sh
python
来做到这一点:

serialize_py='
import sys

try:
  from shlex import quote
except ImportError:
  from pipes import quote

for arg in sys.argv[1:]:
  k, v = arg.split("=", 1)
  print("%s=%s" % (k, quote(v)))
'
serialize() {
  if command -v python >/dev/null 2>&1; then
    python -c "$serialize_py" "$@"
  else
    python3 -c "$serialize_py" "$@"
  fi
}

之后可以这样调用:

serialize b="a=c ==\n=/n/ //a=\n:=dd" kkkkk="vvvvv" >myfile
© www.soinside.com 2019 - 2024. All rights reserved.