在添加到我的$PATH的目录中,我有以下文件:
filename="$1" day="$2" month="$3"
ruby -r "./SomeClass.rb" -e 'SomeClass.run($filename, $day, $month)'
假设此文件称为某个类。当我在终端中键入 someclass 时,我的系统会将其识别为有效命令并正确运行相应的 Ruby 文件。但这些论点并没有被传递进来。如何将参数传递到别名中?
如何将参数传递到别名中?
不要使用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)";
}
您使用的是单引号。将它们更改为双精度:
ruby -r "./SomeClass.rb" -e "SomeClass.run($filename, $day, $month)"
在单引号内不进行扩展。来自 bash 手册:
关于3.1.2.2 单引号
将字符括在单引号 ('''( 中可保留引号内每个字符的文字值。单引号之间不能出现单引号,即使前面有反斜杠也是如此。
3.1.2.3 双引号
将字符括在双引号 ('"'( 中将保留引号内所有字符的文字值,但"$"、"、"\"以及启用历史记录扩展时为"!"除外。字符"$"和"在双引号中保留其特殊含义(请参阅外壳扩展(。反斜杠仅在后跟以下字符之一时才保留其特殊含义:"$"、"\" 或换行符。在双引号内,将删除后跟其中一个字符的反斜杠。没有特殊含义的字符前面的反斜杠保持不变。双引号可以在双引号内用反斜杠括起来。如果启用,将执行历史记录扩展,除非使用反斜杠转义双引号中显示的"!"。不会删除"!"前面的反斜杠。
我正在使用的报价的一个有用页面是关于 grymoire。
关于问题的标题,请检查这个问题(bash中带有变量的别名(及其答案:你不能也必须使用函数。