我正在解析包含key=value数据的文件,然后将它们导出为环境变量。我的解决方案有效,但不适用于特殊字符,例如:
。数据
VAR1=abc
VAR2=d#r3_P{os-!kblg1$we3d4xhshq7=mf$@6@3l^
Run Code Online (Sandbox Code Playgroud)
脚本文件
#!/bin/bash
while IFS="=" read -r key value; do
case "$key" in
'#'*) ;;
*)
eval "$key=\"$value\""
export $key
esac
done < .data
Run Code Online (Sandbox Code Playgroud)
$ . ./script.sh
输出:
$ echo $VAR1
abc
$ echo $VAR2
d#r3_P{os-!kblg1=mf6@3l^
Run Code Online (Sandbox Code Playgroud)
但应该是: d#r3_P{os-!kblg1$we3d4xhshq7=mf$@6@3l^
Ber*_*mos 56
只需使用单引号:
export VAR2='d#r3_P{os-!kblg1$we3d4xhshq7=mf$@6@3l^'
Run Code Online (Sandbox Code Playgroud)
您根本不需要evaldeclare ,只需使用内置函数bash即可即时创建变量!
case "$key" in
'#'*) ;;
*)
declare $key=$value
export "$key"
esac
Run Code Online (Sandbox Code Playgroud)