$ export MYVAR=$(echo -e "something
MYVAR=10")
$ env
...
MYVAR=something
MYVAR=10
...
上面的代碼顯示了問題所在。 如果你試圖使用簡化版本來閱讀這個代碼(很多人都是這樣做的),你會得到錯誤的值。這解釋了它:
$ env | while IFS== read var value; do
["$var" == "MYVAR"] && echo $value
done[/span
某個
10
經過長時間的調查,我在想bash或sh是否根本無法處理這種情況。
如果我可以得到一個沒有數值的變數串列,我就可以解決這個問題,但是看起來如果沒有一個外部任務(比如說python),我就無法做到這一點......
QUESTION
問題:在shell中,我怎樣才能得到一個環境變數的串列及其值,并與上面的例子一起使用?
uj5u.com熱心網友回復: 將給你一個所有環境變數的串列--包括沒有匯出的變數。
對于這些變數,你可以運行: 以獲得完整的宣告。 或者你可以獲得所有宣告: uj5u.com熱心網友回復: 正如choroba指出的,你可以使用 uj5u.com熱心網友回復: 你可以使用 由于名字被保證沒有新行,你可以用管道把它送到你的shell回圈中: 或者如果可能的話,在 (在 uj5u.com熱心網友回復: 有一個簡單的方法可以看到一個沒有名字的環境變數,就是直接回顯它(在一個帶引號的字串里面): 環境變數在 "MYVAR="后面包含一個換行,使 "env "的輸出看起來有點奇怪,但它是正常作業的。
標籤: 上一篇:對每一組數值進行逐列串聯
下一篇:洗掉多個檔案的命令
env只顯示匯出的環境。compgen -A variable
typeset -p "$@"
typeset -p
env -0 :export MYVAR="$(echo -e "something
MYVAR=10")""。
env -0 | while IFS== read -d ''/span> -r var value; do
["$var" = "MYVAR"] & & echo "$value"
done
一些東西
MYVAR=10
awk來獲取環境變數的名字:$ awk 'BEGIN {for (k in ENVIRON) { print k }}'
...
awk '...'/span> | while read name; do
value=${!name}。
...
done
awk本身做處理。bash中,你可以使用declare -x來獲得類似于env產生的輸出。如果有一個額外的標志,你可以用它來獲得只有環境變數的名字,那就更好了。
$ export MYVAR=$(echo -e "something
MYVAR=10")
$ echo "$MYVAR"。
東西
MYVAR=10
