Bash - 导出带有特殊字符 ($) 的环境变量

Use*_*ser 8 bash

我正在解析包含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)

  • 如果字符串包含 ,则 VAR2 将成为数组,整个字符串将用 , 分割 (3认同)

小智 11

只需用反斜杠 \ 转义 $ 符号

  • 如果数据是由某些 3rd 方应用程序自动生成并保存在 `.data` 文件中,那么您可能无法在自动化环境中执行此操作 (2认同)

Ini*_*ian 3

您根本不需要evaldeclare ,只需使用内置函数bash即可即时创建变量!

case "$key" in
  '#'*) ;;
   *)
       declare $key=$value
       export "$key"
esac
Run Code Online (Sandbox Code Playgroud)