脚本中的Bash历史记录:`!#:*`

发牢骚的

我一直在阅读LPIC-1学习指南

echo "This is a sentence. " !#:* !#:1->text3

我在理解上面的代码行如何echo多次重复执行命令时遇到了麻烦我知道它正在使用bash的历史记录功能,但是在!#:*上找不到任何文档!#:1有人可以帮我解释一下吗?

G-Man说“恢复莫妮卡”

是的,这正在使用历史记录。  !#是一个历史事件指示符,它指的是到目前为止键入的整个命令行。  :*是一个单词(范围)指示符,表示除0之外的所有单词。因此,输入后echo "This is a sentence. ",将!#:*扩展为"This is a sentence.  "并且(其中xy是整数)是一个单词(范围)指示符,它表示单词编号x到单词编号y如果省略y),则将其解释为从第二个到最后一个单词的单词编号x因此,在“到目前为止已输入整个命令行”之后,显示为x-yx-

echo "This is a sentence. " "This is a sentence. "

然后!#:1-扩展为"This is a sentence. ",因为每个引用的"This is a sentence. "字符串都计为一个单词,所以!#:1-等价于!#:1(只是单词编号1)。所以你最终会

echo "This is a sentence. " "This is a sentence. " "This is a sentence. " >text3

命令中的->一起出现的事实只是一个混乱;他们不互动。还有“这是一个句子”这一事实。用引号将发生的事情弄糊涂;如果你说

echo This is a sentence. !#:* !#:1-

它会扩展为

echo This is a sentence. This is a sentence. !#:1-

然后

echo This is a sentence. This is a sentence. This is a sentence. This is a

(因为!#:1-从倒数第二个字扩展到第1个字。)

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章