我有以下 Bash 脚本
case $- in (*H*) echo enabled ;; (*) echo disabled ;; esac
set -H
case $- in (*H*) echo enabled ;; (*) echo disabled ;; esac
pwd
last_command="!!"
echo $last_command
打印
disabled
enabled
/home/user
!!
第一行代码检查是否启用了历史扩展。第二个可以扩展历史。第三个与第一个相同。然后它运行pwd
并最终分配最后一个命令last_command
并打印该变量。
历史并没有扩大。到底是怎么回事?
答案1
对于非交互式 shell,您必须专门还启用命令历史记录:
set -o history
set -o histexpand
然后你的例子就会起作用:
disabled
enabled
/home/schaller/tmp/502442
last_command="pwd"
pwd