我正试图弄清楚如何理智和可移植(尽可能)处理名称不映射到有效shell变量的环境变量。结果必须逐字节准确,因此我不愿意解决诸如解析env
工具输出之类的问题。
env 'Invalid Name=Some Value' bash <<'EOF'
s='Invalid Name'
printf '%q\n' "${!s}"
EOF
我希望上面的代码会发出Some Value
;相反,它会返回一个空字符串。
答案 0 :(得分: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"]}"