2016-09-16 71 views

回答

1

下面是#bash的解決方案。

unset IFS 
args=() i=0 
for var in $(compgen -e); do 
    printf -v 'args[i++]' -e%s=%s "$var" "${!var}" 
done 

我最初以爲的想法是輸出,因此printf的%Q是必要的,但不是這種情況只是建立一個參數數組時,因此它可以簡化爲這樣:

unset IFS 
args=() 
for var in $(compgen -e); do 
    args+=("-e$var=${!var}") 
done 
3

您可以使用env -0得到一個空值終止的name=value對列表,並使用一個for循環迭代:

while IFS='=' read -r -d '' n v; do 
    printf "'%s'='%s'\n" "$n" "$v" 
done < <(env -0) 

上面的腳本使用進程替換,這是一個BASH功能。在舊殼上,您可以使用管線:

env -0 | while IFS='=' read -r -d '' n v; do 
    printf "'%s'='%s'\n" "$n" "$v" 
done 
+0

我已經看到這在另一個線程中被切斷。它給出了一個語法錯誤,''./foo.sh:line 3:語法錯誤附近的意外標記'<'\ n ./foo.sh:line 3:'done <<(env -0)​​''' – Gajus

+0

是因爲你沒有使用'bash'。確保你使用'bash'來執行腳本。否則使用:'env -0 |而IFS ='='讀-r -d''n v;做printf'{「name」:「%s」,「value」:「%s」} \ n'「$ n」「$ v」;完成「,避免進程替換。 – anubhava

+1

哦,我很傻。我一直忘記zsh。謝謝。 – Gajus