如何在 bash 别名中连接正则表达式?

如何在 bash 别名中连接正则表达式?

我无论如何也想不出如何创建一个可以切换到给定项目目录的别名。

我把所有项目都保存在一个名为 Projects 的文件夹中~/Project/blog ~/Project/whatever

我希望有一个类似于的别名,p whatever它相当于给予的任何东西在cd ~/Project/$1哪里。$1p

我尝试了各种组合,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)

相关内容