簡體   English   中英

如何調用bash函數提供存儲在Bash數組中的環境變量?

[英]how to call a bash function providing environment variables stored in a Bash array?

我在bash腳本中得到了兩個變量。 一個包含腳本中函數的名稱,而另一個是包含KEY=VALUEKEY='VALUE WITH SPACES'對的數組。 它們是解析特定文件的結果,我無法改變它。

我想要做的是調用我的名字的函數。 這很簡單:

# get the value for the function
myfunc="some_function"
# invoke the function whose name is stored in $myfunc
$myfunc

考慮將函數foo定義為

function foo
{
   echo "MYVAR: $MYVAR"
   echo "MYVAR2: $MYVAR2" 
}

如果我得到變量

funcname="foo"
declare -a funcenv=(MYVAR=test "MYVAR2='test2 test3'")

如何在將funcenv添加到環境中的情況下使用它們來調用foo (非變量)調用看起來像

MYVAR=test MYVAR2='tes2 test3' foo

我試着像它一樣編寫腳本

"${funcenv[@]}" "$funcname"

但這會導致錯誤( MYVAR=test: command not found )。

如何使用放在其環境中的數組的參數正確調用該函數(我不想導出它們,它們應該只用於調用的函數)?

你可以這樣做:

declare -a funcenv=(MYVAR=test "MYVAR2='test2 test3'")
for pairs in "${funcenv[@]}"; do
    eval "$pairs"
done
"$funcname"

但請注意,變量在函數外部也是可見的。 如果你想避免這種情況,那么你可以將所有上述內容包裝在(...)子shell中。

為什么不將它們作為參數傳遞給你的函數?

function f() { echo "first: $1";  echo "second: $2"; }

fn=f; $fn oneword "two words"

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM