简体   繁体   English

在 Bash 别名/功能中使用参数

[英]Using a Parameter in a Bash Alias/Function

I am trying to create a helpful bash alias/function.我正在尝试创建一个有用的 bash 别名/函数。 I can't seem to get it to properly interpret the string parameters.我似乎无法正确解释字符串参数。

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

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

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

an example of how Im trying to use decode and it failing:我如何尝试使用 decode 并失败的示例:

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

I'm not sure when I'd use a function vs an alias for cases like these.我不确定什么时候我会使用 function 与此类情况的别名。

For your alias - alias doesn't take parameters.对于您的别名 - 别名不带参数。 Have you tried alias phpr="php -r" ?您是否尝试过alias phpr="php -r"

For the function - it could be something being parsed in your string.对于 function - 它可能是在您的字符串中解析的内容。 Double-quotes allow parsing, Single-quotes take the string verbatim.双引号允许解析,单引号逐字获取字符串。 You want the $1 to be parsed, but include any whitespace, wo you want double-quotes around that.您希望$1被解析,但包含任何空格,您想要双引号。 But you can do single quotes for the rest of it:但是你可以为它的 rest 做单引号:

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

Note that this includes 4 single-quotes and 2 double-quotes.请注意,这包括 4 个单引号和 2 个双引号。

EDIT Updated with Glenn's change.编辑更新了格伦的变化。 If php needs the parameter to be in quotes, you may need to do:如果 php 需要将参数放在引号中,您可能需要执行以下操作:

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

Note that this includes 4 single-quotes and 4 double-quotes.请注意,这包括 4 个单引号和 4 个双引号。

Ah, shell scripting...啊,shell 脚本...

I can answer one part of your question straight away: Bash aliases cannot take arguments.我可以立即回答您的问题的一部分:Bash 别名不能采用 arguments。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM