我想创建一个可以运行的shell别名
command ew --constantswitch --anotherconstantswitch <name>
现在需要从当前路径中提取值name
。 当前路径如下所示
[username@path-to-shell-xxxxxxxx]/path/to/directory/with/name%
如何创建一个别名,以便在运行时aliasX
- 从当前路径中提取
name
(这是提示符的最后一个值( - 将此路径添加到上面的命令中并执行。
别名可能不能胜任这项工作,但函数肯定可以。 试试这段代码:
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
定义别名时(而不是使用时(将展开。
对于稍微复杂的任何内容,您应该使用函数而不是别名,如iBug的答案所示。