在Bash别名/函数中使用参数

时间:2011-04-28 21:56:42

标签: bash

我正在尝试创建一个有用的bash别名/功能。我似乎无法正确解释字符串参数。

alias phpr="php -r '${*}'"
alias decode="php -r 'echo base64_decode($1);'"

function phpr ()
{
    php -r "${*}"
}

function decode ()
{
    php -r "echo base64_decode($1);"
}

我如何尝试使用解码并失败的示例:

decode "MT0xO2JhbGFuY2VfaXNfc2hvd249MDtiZXRfYW1vdW50PTE7YmV0X3R5cGU9MTE7ZmF2b3JpdGVfdHJhY2sxPUZSRTtmYXZvcml0ZV90cmFjazI9TU1BO2Zhdm9yaXRlX3RyYWNrMz1UQU07ZmF2b3JpdGVfdHJhY2s0PU1FRDtmYXZvcml0ZV90cmFjazU9QVFVO3dhZ2VyX3N0YXR1cz0wO2N1cnJlbnRUcmFjaz1GUkU7Y3VycmVudFJhY2U9NjtyYWNlRGF0ZT0yMDExLTA0LTI4O3JhY2V1cGRhdGVkPTs%3D"

PHP Warning:  base64_decode() expects at least 1 parameter, 0 given in Command line code on line 1
PHP Stack trace:
PHP   1. {main}() Command line code:0
PHP   2. base64_decode() Command line code:1

我不确定何时使用函数vs别名来处理这类情况。

2 个答案:

答案 0 :(得分:3)

对于别名 - 别名不接受参数。你试过alias phpr="php -r"吗?

对于函数 - 它可能是在字符串中解析的东西。双引号允许解析,单引号逐字接受字符串。你希望解析$1,但是包括任何空格,你想要双引号。但你可以为其余部分做单引号:

function decode ()
{
    php -r 'echo base64_decode('"$1"');'
}

请注意,这包括4个单引号和2个双引号。

编辑更新了Glenn的更改。如果php需要参数在引号中,您可能需要这样做:

function decode ()
{
    php -r 'echo base64_decode("'"$1"'");'
}

请注意,这包括4个单引号和4个双引号。

啊,shell脚本......

答案 1 :(得分:0)

我可以立即回答你问题的一部分:Bash别名不能接受争论。