我想创建一个运行
的shell别名command ew --constantswitch --anotherconstantswitch <name>
现在需要从当前路径中提取值name
。当前路径看起来像这样
[username@path-to-shell-xxxxxxxx]/path/to/directory/with/name%
如何创建别名,以便在我运行aliasX
时
name
答案 0 :(得分:7)
别名可能无法胜任这项工作,但确实可以胜任。试试这段代码:
myfunc() {
command ew --constantswitch --anotherconstantswitch "${PWD##*/}"
}
技巧是${PWD##*/}
。您知道自动变量$PWD
正是您运行pwd
时获得的,以及Bash的内置字符串替换${var##pattern}
从左侧删除pattern
具有最大匹配的变量。因此,${PWD##*/}
会删除除最后一个斜杠之后的名称之外的所有内容,正如您所描述的那样,这是您正在寻找的内容。
在实践中,功能比别名更通用。如果仍需要为命令添加额外的参数,请将"$@"
附加到函数内部命令的末尾,这样您传递给函数的任何参数都将转发到命令。
答案 1 :(得分:2)
由于您没有尝试执行任何涉及参数的操作,因此实际上可以使用别名:
alias aliasX='echo "${PWD##*/}"'
这将在您使用aliasX
时打印当前目录名称。或者,使用您的示例:
alias aliasX='command ew --constantswitch --anotherconstantswitch "${PWD##*/}"'
请注意,别名必须采用单引号,或者$PWD
会在您定义时展开,而不是在您使用时展开。
对于任何稍微复杂的内容,您应该使用函数而不是别名,如iBug's answer所示。