我们有一个文件如下
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 的文件
仅靠
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