2014-02-20 36 views
1

我试图编写一个bash函数来初始化一些环境变量。 我想追加一个路径给他们,除非它已经在那里。在函数中通过引用设置环境变量

我这样称呼它

$ add_to_path /home/brucewayne MYENV 

这是我到目前为止所。

# adds $1 to path $2 (e.g. add '/opt/blabla' to $PYTHONPATH) 
add_to_path() { 
    if [ -d "$1" ] && [[ ":${!2}:" != *":$1:"* ]]; then 
     $2="$1:${!2}" 
    fi 
} 

但是当我运行它,我得到

./a.sh: line 6: MYENV=/home/brucewayne:/home/pal: No such file or directory 

我的猜测是$2="$1:${!2}"不被解释为分配。 $ 2应该变成MYENV,并且该值应该被设置为MYENV,但是相反,它看起来像我不能通过引用来设置该值。 在bash中这样做的正确方法是什么?

回答

2

在你的函数添加export

add_to_path() { 
    if [ -d "$1" ] && [[ ":${!2}:" != *":$1:"* ]]; then 
     export $2="$1:${!2}" 
    fi 
} 
+0

该死的我已经试过了,但有不同的右侧和失败。谢谢!它确实工作 –

+0

不客气,很高兴它解决了。 – anubhava

+0

你可以通过使用:[[-d“$ 1”&&“:$ {!2}:”!= *“:$ 1:”*]] && export $ 2 =“$ 1:$ {!2 }”。 if .. then .. fi结构将不再需要。 – AsymLabs