为简单起见,我有一个命令要别名:
php artisan route:list | (head -n 3; grep checkout)
此命令显示此表的标题并搜索路由。结果如下所示:
+--------+----------+--------------------------------------------+----------------------------------------------------+-------------------------------------------------------------------------------+------------------------------------------------------+
| Domain | Method | URI | Name | Action | Middleware |
+--------+----------+---------------------------------------------+----------------------------------------------------+-------------------------------------------------------------------------------+------------------------------------------------------+
| | POST | profile/auctions/checkout | user-portal-profile-auctions-checkout | xxxxxxxxxxxxxxxx | web,auth |
| | POST | profile/deals/checkout | user-portal-profile-deals-checkout | xxxxxxxxxxxxxx | web,auth |
| | POST | profile/quotes/checkout | user-portal-profile-quotes-checkout | xxxxxxxxxxxxxxx | web,auth |
所以这就是我的~/.bash_profile
:
alias findRoute='php artisan route:list | (head -n 3; grep $1)'
但我不断收到此错误:
bash: syntax error near unexpected token `checkout'
是什么赋予了?为什么它不接受我的论点?
我尝试在传递的参数中使用单引号和双引号。
我尝试在别名中使用单引号和双引号。没有什么变化。
别名扩展只是文本替换,然后是 shell 的另一轮解析。
当你进入
这首先扩展到:
该结果再次被解析为 shell 代码。这是无效的shell代码。
您想在此处使用脚本或函数。喜欢:
现在,请注意
head
可能会读取超过 3 行,即使它只输出 3 行,因为大多数head
实现会被整个块读取。这意味着grep
不会看到那部分。如果您
sed
是 GNU 实现,则可以替换head -n3
为sed -u 3q
,其中sed
一次读取一个字节的输入,以免超过第三个换行符。或者,您可以
awk
改为使用:Beware
$1
然后被解释为扩展的正则表达式(如 forgrep -E
)而不是基本的正则表达式(withgrep
without-E
)。对于子字符串搜索(如grep -F
),替换为: