我正在看一个教程,其中提到要运行此命令:
sudo chmod 700 !$
我不熟悉!$
。这是什么意思?
基本上,它是上一个命令的最后一个参数。
!$
是上一个命令的“结尾”。请考虑以下示例:我们首先在文件中查找单词:grep -i joe /some/long/directory/structure/user-lists/list-15
如果joe在该用户列表中,我们希望将其从其中删除。我们可以使用该长目录树作为参数来启动vi,也可以简单地将
vi !$
哪一个bash扩展为:vi /some/long/directory/structure/user-lists/list-15
(顺便说一句,来源;方便的指南)
这个!$
标记和特殊的shell变量之间的区别是毫无价值的$_
。实际上,两者都扩展到上一个命令的最后一个参数。但是,!$
在历史记录扩展期间将进行扩展,而$_
在参数扩展期间将进行扩展。一个重要的后果是,当您使用时!$
,扩展的命令将保存在您的历史记录中。
例如,考虑击键
echo Foo
Enter echo !$ Jar
Enter Up Enter; 和
echo Foo
Enter echo $_ Jar
Enter Up Enter。
(唯一更改的字符是$!
和$_
,位于中间。)
在前者中,当您按时Up,命令行将读取echo Foo Jar
,因此写入stdout的最后一行是Foo Jar
。
在后者中,当您按时Up,命令行将读取echo $_ bar
,但现在$_
的值与以前不同-实际上,$_
现在是Jar
,因此写入stdout的最后一行是Jar Jar
。
另一个结果是_
可以在其他参数扩展中使用,例如,命令序列
printf '%s ' isomorphism
printf '%s\n' ${_%morphism}sceles
印刷品isomorphism isosceles
。但是没有类似的${!$%morphism}
扩展。
有关Bash扩展阶段的更多信息,请参阅参考资料EXPANSION
部分man 1 bash
(在线版本中称为Shell扩展)。本HISTORY EXPANSION
节是单独的。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句