在添加到我的$ PATH的目录中,我有以下文件:
filename="$1" day="$2" month="$3"
ruby -r "./SomeClass.rb" -e 'SomeClass.run($filename, $day, $month)'
假设此文件名为someclass。当我输入someclass到终端时,我的系统将其识别为有效命令并正确运行相应的Ruby文件。但是参数没有传入。如何将参数传递给别名?
答案 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)及其答案:您不能也不必使用功能。