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 に答える