这个命令序列有什么问题:
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'