具有多值的環境變量可能會混淆env
的輸出:名單busybox的所有環境變量名
# export A="B
> C=D
> E=F"
# env
A=B
C=D
E=F
TERM=xterm
SHELL=/bin/bash
USER=root
MAIL=/var/mail/root
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
PWD=/root
LANG=en_US.UTF-8
PS1=\h:\w\$
SHLVL=1
HOME=/root
LOGNAME=root
_=/usr/bin/env
在這種情況下,我不能只使用awk -F=
提取所有的名字,因爲它顯示了錯誤的名字C
和E
:
# env | awk -F= '{print $1}'
A
C
E
TERM
SHELL
USER
MAIL
PATH
PWD
LANG
PS1
SHLVL
HOME
LOGNAME
_
後來我想通了,env
支持標誌-0
結束以0字節,而不是換行符每個輸出線,因此使用sed
我可以bash
切斷值:
# env -0 | sed -e ':a;N;$!ba;s/\([^=]\+\)=\([^\x00]*\)\x00/\1\n/g'
A
TERM
SHELL
USER
MAIL
PATH
PWD
LANG
PS1
SHLVL
HOME
LOGNAME
_
不過了BusyBox的版本env
does not support標誌-0
的。還有另一種方法可以做到嗎?
您是否願意使用其他腳本語言來完成這項工作,比如'python -c'import os;打印「」.join(os.environ中的x爲「\ n」,x爲「鍵%ENV」或「perl -le」),或者你需要限制自己一套最小的shell工具? – Celada
@Celada:用Python它太容易了:)在這裏,我只能使用BusyBox。 – spatar