Environment-Variables
/usr/bin/env -0 用於非 Linux 系統
考慮我想以程式方式讀取互動式 shell 的環境。現在,啟動一個 shell,執行
/usr/bin/env
並擷取它的輸出似乎是一個很好的解決方案。但直到我們意識到變數值可以有換行符的那一刻:$ export LINE0='VALUE0 > LINE1=VALUE1' $ env | grep ^LINE LINE0=VALUE0 LINE1=VALUE1
因此,擷取
env -0
(NULL
-separated entries) 的輸出似乎是一種更好的方法,但這僅適用於 GNUenv
,因此主要是特定於 Linux 的。是否有任何可移植的(POSIX 或 BSD)方法來獲取
NULL
- 分隔的環境變數列表,僅使用標準命令行工具(可以使用awk
,但不允許perl
//python
)ruby
?
我想知道您打算如何恢復擷取的環境,因為除了 zsh 之外沒有 shell 支持其變數中的 nul 字節。
無論如何,您可以使用
awk
to 轉義\
as\\
和換行符 as\n
,並且仍然使用換行符來分隔name=val
條目:awk 'BEGIN{ for(e in ENVIRON){ v = e "=" ENVIRON[e]; gsub(/\\/, "&&", v); gsub(/\n/,"\\n",v); print v } }'
fzd$ env - $'foo\\bar\nquux=foo\\bar\nquux' lol=cat printenv lol=cat foo\bar quux=foo\bar quux fzd$ env - $'foo\\bar\nquux=foo\\bar\nquux' lol=cat awk 'BEGIN{ for(e in ENVIRON){ v = e "=" ENVIRON[e]; gsub(/\\/, "&&", v); gsub(/\n/,"\\n",v); print v } }' foo\\bar\nquux=foo\\bar\nquux lol=cat