我正在OSX中使用MacPorts方法安装一个AMP服务器(在Ubuntu中要容易得多)。我想在路径中添加一个名为apachectl的bash脚本,它将引用/opt/local/apache2/bin/apachectl。我已经能够做到这一点,但我想知道如何将参数传递给apachectl,然后将其传递给/opt/local/apache2/bin/apachectl

e.g. apachectl -t >>> /opt/local/apache2/bin/apachectl -t

对于那些想知道为什么我不重新排序我的路径的人,我问的是我可以用其他命令来做同样的事情,比如我现在使用的ls -l(Ubuntu风格)看起来像
ls -l $1

在档案里。
这是唯一的方法,为什么位置参数,如我在上面所做的?

最佳答案

你想要什么,就用“$@”
解释是从this answer开始的,而这又是从this page开始的

$@ -- Expands to the positional parameters, starting from one.
When the expansion occurs within double quotes, each parameter
expands to a separate word. That is, "$@" is equivalent to "$1"
"$2" ... If the double-quoted expansion occurs within a word, the
expansion of the first parameter is joined with the beginning part
of the original word, and the expansion of the last parameter is
joined with the last part of the original word. When there are no
positional parameters,  "$@" and $@ expand to nothing (i.e., they are removed).

这意味着您可以按如下方式调用ll脚本:
ll -a /

“$@”将把-a /扩展为单独的位置参数,这意味着您的脚本实际上运行了
ls -l -a /

您还可以使用函数:
apachectl() {
  /opt/local/apache2/bin/apachectl "$@"
}

10-07 16:28