linux - 如何在 shell 脚本中引用历史行?

标签 linux for-loop ubuntu reference sh

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

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

但我试过调用!用 $! 命令和“!”当然都不起作用。我也试过 fc $i 但什么也没发生。有人能帮我吗?

最佳答案

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

History expansion is performed immediately after a complete line is read, before the shell breaks it into words.



这意味着历史扩展发生在变量扩展之前,即您不能使用变量而不是 ! 之后的数字。因为外壳仍然不知道它有什么值(value)。

此外,非交互式 shell 默认禁用历史扩展。您可以使用 set 更改它,参见例如
#!/bin/bash
set -o history
set -H
ls
!-1

关于linux - 如何在 shell 脚本中引用历史行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59920970/

相关文章:

linux - 无法访问安装在 Azure Linux VM 上的 Elasticsearch

python - 用 python 改进 bash 脚本

python - 如何将 for 循环中的每个迭代分配给数据库存储的变量

javascript - HTML Javascript 在 for 循环中添加一个 var 作为输入值

Python - 使用 FOR 循环迭代 pandas DataFrame 时,使用 IF 语句查找字符串中的子字符串

Ubuntu ffmpeg 水印位置

node.js - 如何在设置本地 Node 前缀后更新 npm

linux - 在 SLURM sbatch 脚本中使用 Bash 变量

linux - 无法访问 2>&1 : How to treat variable content as a redirection not as filename

linux - 线程.h :10:24: fatal error installation error