3

我想在我的 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 . }

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

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

4

3 回答 3

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 .
}
于 2012-10-31T05:53:19.963 回答
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 .
于 2012-10-31T13:33:41.507 回答
-1
pserver(){ 
    ping "$1"
}

然后 :

pserver abc.com

那应该可以解决问题=)

于 2012-10-31T03:57:16.667 回答