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

在Bash别名/函数中使用参数,bash,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 "MT0xO2JhbGF

我正在尝试创建一个有用的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

我不确定在这种情况下何时使用函数与别名。

我可以直接回答您问题的一部分:Bash别名不能接受参数。

对于您的别名,别名不接受参数。您是否尝试过
别名phpr=“php-r”

对于函数-它可能是字符串中正在解析的内容。双引号允许解析,单引号一字不差地接受字符串。您希望解析
$1
,但要包含任何空格,您希望在其周围加上双引号。但您可以对其余部分使用单引号:

function decode ()
{
    php -r 'echo base64_decode('"$1"');'
}
请注意,这包括4个单引号和2个双引号

编辑根据格伦的更改进行更新。如果php需要将参数括在引号中,则可能需要执行以下操作:

function decode ()
{
    php -r 'echo base64_decode("'"$1"'");'
}
请注意,这包括4个单引号和4个双引号


啊,shell脚本…

那么这就是别名和函数之间的用例。谢谢您可能需要一些双引号来引用php脚本:
php-r'echo base64_decode“'“$1””;'--如果$1是'foo-bar',那么您将得到
php-r'echo base64_decode(“foo-bar”);'啊,很好的观点@glenn。我不使用php,所以我不熟悉它的需求。我已经更新了我的答案。谢谢@Tim。它工作得很好。它也让我了解了如何做phpr(封装“in”)@Brombomb,在编写shell脚本时,了解三种转义机制之间的差异很重要,并且记住引号只是切换-你可以在一行中任意多次地进入和退出引号模式。完整的细节将是一篇更长的文章。我很确定我在某处看到过它的文档。如果我在这个页面上,我将链接到这里。