使用当前路径的值创建 shell 别名

Create shell alias with value from current path

我想创建一个 shell 别名 运行

command ew --constantswitch --anotherconstantswitch <name>

现在需要从当前路径中提取值name。当前路径看起来像这样

[username@path-to-shell-xxxxxxxx]/path/to/directory/with/name%

我怎样才能创建一个别名,这样当我 运行 aliasX 它会

  1. 从当前路径(提示的最后一个值)中提取 name
  2. 将此路径添加到上面的命令中并执行。

别名可能无法胜任这项工作,但功能肯定可以。试试这个代码:

myfunc() {
  command ew --constantswitch --anotherconstantswitch "${PWD##*/}"
}

诀窍是${PWD##*/}。你知道自动变量 $PWD 正是你在 运行 pwd 时得到的,以及 Bash 的内置字符串替换 ${var##pattern} 删除 pattern 从最大匹配变量的左边开始。因此 ${PWD##*/} 删除除最后一个斜杠后的名称之外的所有内容,正如您所描述的那样,这就是您要查找的内容。

实际上,函数比别名更通用。如果您仍然需要向命令添加额外的参数,请将 "$@" 附加到函数内命令的末尾,这样您传递给函数的任何参数都将转发给命令。

由于您不想做任何涉及参数的事情,实际上可以使用别名:

alias aliasX='echo "${PWD##*/}"'

这将在您使用 aliasX 时打印当前目录名称。或者,使用您的示例:

alias aliasX='command ew --constantswitch --anotherconstantswitch "${PWD##*/}"'

请注意,别名 必须 放在单引号中,否则 $PWD 将在您定义它而不是在您使用它时展开。

对于任何稍微复杂的东西,您应该使用函数而不是别名,如 所示。