问题:
我在 ruby 脚本中将 shell 脚本作为子进程运行,在运行脚本后,我希望有一个选项来检查 shell 的所有环境变量,包括数组变量。
到目前为止,我想出了:
set | awk -F= 'BEGIN {v=0;}
/^[a-zA-Z_][a-zA-Z0-9_]*=/ {v=1;}
v==1 && $2~/^['\''\$]/ {v=2;}
v==1 && $2~/^\(/ {v=3;}
v==2 && /'\''$/ && !/'\'\''$/ {v=1;}
v==3 && /\)$/ {v=1;}
v {print;}
v==1 {v=0;}
'
这很好地只显示了变量,包括数组、多行字符串和过滤掉的函数。
但这并不总是使用相同的格式,尤其是数组变量在 BASH 和 ZSH 中的表示方式不同。
这是我当前的实现:https ://github.com/mpapis/tf/blob/master/lib/tf/environment.rb
问题:
有没有一种简单的方法来显示所有将在 BASH 和 ZSH / 可能其他 shell 中持续工作的变量。