如何在bash函数定义中扩展环境变量?

时间:2012-10-31 03:52:58

标签: bash

我想在我的bashrc

中尝试这样的事情
SERVER=abc.com
geta() { scp ${SERVER}:$1 . ;}

SERVER=xyz.com
getx() { scp ${SERVER}:$1 . ;}

declare -f geta getx
geta () 
{ 
    scp ${SERVER}:$1 .
}
getx () 
{ 
    scp ${SERVER}:$1 .
}

我想要将geta和getx设置为

geta () { scp abc.com:$1 . }
getx () { scp xyz.com:$1 . }

有没有办法在函数定义中强制进行变量扩展?

注意:为了澄清,我更改了示例

3 个答案:

答案 0 :(得分:3)

您可以使用eval(转义$以便$1不会展开)

SERVER=abc.com
eval "geta() { scp ${SERVER}:\$1 . ;}"
SERVER=xyz.com
eval "getx() { scp ${SERVER}:\$1 . ;}"

declare -f geta getx

的输出
geta () 
{ 
    scp abc.com:$1 .
}
getx () 
{  
    scp xyz.com:$1 .
}

答案 1 :(得分:1)

这是使用别名的好时机:

get_file() { echo scp "$1":"$2" .; }

SERVER=abc.com
alias geta="get_file $SERVER"

SERVER=xyz.com
alias getx="get_file $SERVER"

geta foo
getx bar

输出

scp abc.com:foo .
scp xyz.com:bar .

答案 2 :(得分:-1)

pserver(){ 
    ping "$1"
}

然后:

pserver abc.com

那应该做的诀窍=)