【问题标题】:Terminal: How do I pass arguments into an alias?终端:如何将参数传递给别名?
【发布时间】:2014-12-19 10:16:37
【问题描述】:

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

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

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

【问题讨论】:

    标签: macos bash terminal


    【解决方案1】:

    如何将参数传递给别名?

    不要使用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)";
    }
    

    【讨论】:

    • @anishsane:感谢您做出重要的报价更改,我从问题中复制/粘贴了错误。
    • 你是如何声明一个函数的?这是一种脚本语言吗?还是 bash 本身内置了这种功能?
    • BASH 本身完全支持这一点。您可以将此代码放在您的~/.bashrc 中,然后该功能在任何地方都可用。
    【解决方案2】:

    您正在使用单引号。将它们更改为双倍:

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

    单引号内不进行扩展。来自bash manual

    3.1.2.2 单引号

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

    3.1.2.3 双引号

    将字符括在双引号 ('"') 中会保留引号内所有字符的字面值,但 '$'、'`'、'\' 以及启用历史扩展时,'! '。字符 '$' 和 '`' 在双引号中保留其特殊含义(请参阅 Shell 扩展)。反斜杠仅在后跟以下字符之一时才保留其特殊含义:'$'、'`'、'" '、'\' 或换行符。在双引号内,将删除后面跟有这些字符之一的反斜杠。没有特殊含义的字符前面的反斜杠保持不变。双引号可以用反斜杠在双引号中引用。如果启用,除非使用反斜杠转义出现在双引号中的“!”,否则将执行历史扩展。 '!' 前面的反斜杠不会被删除。

    grymoire 上有一个关于我正在使用的报价的有用页面。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-09-17
      • 2011-10-20
      • 2023-03-09
      • 2011-10-23
      • 1970-01-01
      • 2015-01-17
      相关资源
      最近更新 更多