0

我试图弄清楚如何理智地和可移植地(尽可能地)处理名称不映射到有效 shell 变量的环境变量。结果逐字节准确至关重要,因此我不愿意经历诸如解析env工具输出之类的技巧。

env 'Invalid Name=Some Value' bash <<'EOF'
s='Invalid Name'
printf '%q\n' "${!s}"
EOF

我希望上面的代码会发出Some Value;相反,它返回一个空字符串。

4

1 回答 1

1

一种不可移植的方法(仅限 Linux)是解析/proc/self/environ

declare -A environ
while IFS='' read -r -d ''; do
  var=${REPLY%%=*}
  val=${REPLY#*=}
  environ[$var]="$val"
done </proc/self/environ
printf '%q\n' "${environ["Invalid Name"]}"
于 2013-02-04T17:33:00.903 回答