7

我想知道如何将给函数的参数bash正确“转发”到另一个函数或程序。

例如,在 Mac OS X 中,有一个命令行程序open手册页)将使用其默认应用程序打开指定的文件(即,它将在 Xcode 中打开 *.h 文件,或在 Finder 中打开文件夹等)。我想简单地调用open不带参数的方法来打开 Finder 中的当前工作目录,或者为其提供典型参数以正常使用它。

我想,“我就用一个函数!” 哈,我想那里没那么快。这是我所拥有的:

function open
{
    if [ $# -eq 0 ]; then
        /usr/bin/open .
    else
        /usr/bin/open "$*"
    fi
}

简单的调用open效果很好,它会在 Finder 中打开工作目录。调用open myheader.h效果很好,它会在 Xcode 中打开“myheader.h”。

但是,调用open -a /Applications/TextMate.app myheader.h以尝试在 TextMate 而不是 Xcode 中打开文件会导致错误“无法找到名为'/Applications/TextMate.app myheader.h'的应用程序”。似乎传递"$*"/usr/bin/open导致我的整个参数列表仅作为一个参数转发。

将函数更改为仅使用usr/bin/open $*(不引用)会导致带有空格的路径出现问题。然后调用open other\ header.h会导致错误“文件 /Users/inspector-g/other 和 /Users/inspector-g/header.h 不存在”,但解决了另一个问题。

必须有一些约定来转发我刚刚错过的论点。

4

1 回答 1

11

你确实错过了"$@",这是为这种情况设计的。

于 2012-04-20T01:31:36.627 回答