终端:如何将参数传递给别名?

时间:2014-12-19 10:16:38

标签: macos bash terminal

在添加到我的$ PATH的目录中,我有以下文件:

filename="$1" day="$2" month="$3"
ruby -r "./SomeClass.rb" -e 'SomeClass.run($filename, $day, $month)'

假设此文件名为someclass。当我输入someclass到终端时,我的系统将其识别为有效命令并正确运行相应的Ruby文件。但是参数没有传入。如何将参数传递给别名?

2 个答案:

答案 0 :(得分:4)

  

如何将参数传递给别名?

请勿使用alias,最好为此声明function。你可以在bash函数中轻松传递参数并做其他事情:

someclass() {
   # make sure enough arguments are passed in
   # echo "$1 - $2 - $3";
   filename="$1"; day="$2"; month="$3";
   ruby -r "./SomeClass.rb" -e "SomeClass.run($filename, $day, $month)";
}

答案 1 :(得分:1)

您使用的是单引号。将它们改为双倍:

ruby -r "./SomeClass.rb" -e "SomeClass.run($filename, $day, $month)"

单引号内没有扩展。来自bash manual

  

3.1.2.2单引号

     

用单引号(''')括起字符可保留引号中每个字符的字面值。单引号之间可能不会出现单引号,即使前面有反斜杠也是如此。

     

3.1.2.3双引号

     

用双引号括起来的字符('“')保留引号内所有字符的字面值,但'$','`','\'除外,并且,当启用历史记录扩展时,'! '。''和'''字符在双引号中保留其特殊含义(参见Shell Expansions)。反斜杠只有在跟随以下字符之一时才保留其特殊含义:'$','`','“ ','\'或换行符。在双引号内,将删除后跟其中一个字符的反斜杠。没有特殊含义的字符前面的反斜杠不做修改。双引号可以在双引号内引用,前面加一个反斜杠。如果启用,将执行历史记录扩展,除非使用反斜杠转义出现在双引号中的“!”。 “!”前面的反斜杠不会被删除。

我正在使用的引号的有用页面位于grymoire

关于问题的标题,请检查this question (Alias with variable in bash)及其答案:您不能也不必使用功能。