bash 错误 !{P: 未找到事件

bash 错误 !{P: 未找到事件

这个命令序列有什么问题:

stephen@stephen:~$ RETENTION=3
stephen@stephen:~$ echo $RETENTION
3
stephen@stephen:~$ SNAP=bpool/BOOT/ubuntu_7pdn8o@autozsys_
stephen@stephen:~$ sudo zfs list -t snapshot -o name | grep ^$SNAP | sed -n -e :a -e "1,${RETENTION}!{P;N;D;};N;ba" | xargs -n 1 echo zfs destroy -nprd
bash: !{P: event not found

此处的目的是删除除最近三张快照之外的所有快照。要实现此目的,应该用什么来代替 !{P?

答案1

双引号允许 bash 将!其视为壳牌历史事件指示器。如果您想防止这种情况,但仍允许扩展 shell 变量${RETENTION},您可以在变量后将双引号切换为单引号:

"1,${RETENTION}"'!{P;N;D;};N;ba'

相关内容