![如何在 bash 别名中连接正则表达式?](https://linux22.com/image/1238693/%E5%A6%82%E4%BD%95%E5%9C%A8%20bash%20%E5%88%AB%E5%90%8D%E4%B8%AD%E8%BF%9E%E6%8E%A5%E6%AD%A3%E5%88%99%E8%A1%A8%E8%BE%BE%E5%BC%8F%EF%BC%9F.png)
我无论如何也想不出如何创建一个可以切换到给定项目目录的别名。
我把所有项目都保存在一个名为 Projects 的文件夹中~/Project/blog
~/Project/whatever
我希望有一个类似于的别名,p whatever
它相当于给予的任何东西在cd ~/Project/$1
哪里。$1
p
我尝试了各种组合,alias p="cd ~/Projects/\$1"
并使用所有常见的正则表达式转义方法,但仍无法成功。
有任何想法吗?
答案1
您不能在别名中使用位置参数。请改用函数。
p() {
cd ~/Projects/"$1"
}
答案2
也许这就是你要找的: 如何在 bash 中内联扩展别名?
因此一个简单的解决方案是使用 shell-expand-line 命令
定义不带 \$1 的别名
$bash>alias p="cd ~/Projects/"
$bash>p
只需按Meta- Ctrl-e即可展开:
$bash>cd /home/USERNAME/Projects/
这个解决方案让一个尴尬的空格处在扩展的末尾,你必须在BackSpace写入之前删除它不管怎么说。
正如 Ignacio Vazquez-Abrams 所建议的,更优雅的解决方案是使用具有自动完成属性的函数(查看 /etc/bash_completion)