只是想知道为什么这不起作用
#!/bin/bash
ls /bin
ls !$
我预计会运行ls /bin
两次,但第二次会引发错误,因为!$
未解释
我是否错过了什么,或者!$
只能在命令行中工作?
man bash
我在(在 mac 上)中找不到相关部分
答案1
答案2
明智的做法是
ls /bin
ls $_
或者
set ls /bin
$*
$*
或者
c='ls /bin'
$c
$c
注意事项:值得记住的是,每种方法都存在一些陷阱。 $_ 解决方案仅捕获最后一个参数:因此ls foo bar
$_ 只包含bar
.使用的set
将覆盖参数($1
、$2
等)。所有这些编写的内容都可以工作,但是当推广到更复杂的命令(其中转义和空格很重要)时,您可能会遇到一些困难。例如:(ls 'foo bar'
其中单个路径名参数foo bar
包含二或更多空格,或任何其他空白字符)在这两个示例中都不会正确运行。可能需要适当的转义(可能与eval
命令结合使用)或使用"$@"
代替 来$*
解决这些情况。