作为命令的一部分,带有空格的 Bash 别名

boo*_*ull 12 shell bash parameter alias function

我正在尝试创建一个 bash 别名,其中别名本身有一个空格。

这个想法是别名(即con)代表sudo openvpn --config /path/to/my/openvpn/configs/. 当使用con别名时,这会产生可读的命令。

IE: `con uk.conf` == `sudo openvpn --config /path/to/my/openvpn/configs/uk.conf`

我明白,我不能宣布这样的别名: con ="sudo openvpn --config /path/to/my/openvpn/configs/"。bash 函数会在这种情况下工作吗?我从来没有听说过,但是在研究这个小问题的解决方案时。

ter*_*don 13

是的,您将需要使用一个函数。如果您想添加参数,别名将起作用,给别名的任何参数都作为参数传递给别名程序,但作为单独的参数,而不是简单地附加到那里的内容。为了显示:

$ alias foo='echo bar'
$ foo
bar
$ foo baz
bar baz
Run Code Online (Sandbox Code Playgroud)

如您所见,回显的是bar baz而不是barbaz。由于您想连接传递给现有参数的值,因此您需要以下内容:

function com(){ sudo openvpn --config /path/to/my/openvpn/configs/"$@"; }
Run Code Online (Sandbox Code Playgroud)

将上面的行添加到您的~/.bashrc,您就可以开始了。

  • 您可以使用 `"$@"` 代替 `"$1"`,以便传递后续参数。(一般性评论,可能与此处的具体案例无关) (4认同)
  • @TomHart 是的。`$@` 包含所有给定的参数。请参阅 [$\* 和 $@ 之间的区别是什么?](http://unix.stackexchange.com/q/41571)。 (4认同)