我正在尝试创建一个有用的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别名来处理这类情况。
答案 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别名不能接受争论。