终端:如何将参数传递到别名中



在添加到我的$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中带有变量的别名(及其答案:你不能也必须使用函数。

最新更新