man bash
描述了一个非常有用的事件指示符
^串1^串2^
快速替换。重复上一个命令,将 string1 替换为 string2。等价于 ''!!:s/string1/string2/''
有没有办法在命令行!!:gs/string1/string2/
输入时执行@string1@string2@
替换上一个命令中的所有匹配项?(@
或任何其他指定的字符/字符串)
man bash
描述了一个非常有用的事件指示符
^串1^串2^
快速替换。重复上一个命令,将 string1 替换为 string2。等价于 ''!!:s/string1/string2/''
有没有办法在命令行!!:gs/string1/string2/
输入时执行@string1@string2@
替换上一个命令中的所有匹配项?(@
或任何其他指定的字符/字符串)
其实可能存在一种方式,使用`trap "..." debug'...
就像是:
trap 'if [[ $BASH_COMMAND =~ ^@(.*)@(.*)@$ ]] ;then
BASH_LAST=${BASH_LAST//${BASH_REMATCH[1]}/${BASH_REMATCH[2]}};
$BASH_LAST;
unset BASH_COMMAND;
else BASH_LAST=$BASH_COMMAND;
fi;
' debug
这又快又脏,留下了执行错误,但我认为:这可能是一种方法。
编辑 01
这有点好,但历史仍然很错误:
shopt -s extdebug
trap '
if [[ $BASH_COMMAND =~ ^@(.*)@(.*)@$ ]] ;then
BASH_LAST="${BASH_LAST//${BASH_REMATCH[1]}/${BASH_REMATCH[2]}}"
$BASH_LAST
false
else
BASH_LAST="$BASH_COMMAND"
fi' debug
但是警告:我这样做是为了好玩,为了玩bash并了解它是如何工作的……这不是为了在有效的最终解决方案中使用!!