如何在Shell脚本中引用历史记录行?

时间:2020-01-26 17:38:40

标签: linux for-loop ubuntu reference sh

所以我想做的是复制以前使用的多行,使用for循环并引用历史行。 就像我制作了一个目录,然后将cd插入目录,然后制作一个文件,然后删除了所有内容,我想在不删除的情况下重现包含文件的目录,就像我想使用!1!2!3,但是怎么样? 我尝试了以下方法:

for i in {1..3}
do   
   !$i
done

但是我已经试过了!用$命令!和“!”,当然都没有用。我也尝试过fc $ i,但是什么也没发生。有人可以帮我吗?

1 个答案:

答案 0 :(得分:0)

man bash在“历史扩展”下说:

在读取完整行之后,在外壳将其分解为单词之前,将立即执行历史扩展。

这意味着历史记录扩展发生在变量扩展之前,即,您不能使用变量来代替!之后的数字,因为外壳仍然不知道它具有什么值。

此外,默认情况下,非交互式外壳具有禁用历史记录扩展的功能。您可以使用set进行更改,例如,参见

#!/bin/bash
set -o history
set -H
ls
!-1