尽管模糊测试我发现这是可能的,通过定义
var=$'\365\\'
,执行以下两个命令(用于删除最后一个换行符之前的所有内容)无限期挂起,占用 100% CPU在 Bash 4.2.25(1)-release (x86_64-pc-linux-gnu) 中:
[ -n "${var##*$'\n'}" ]
[[ -n "${var##*$'\n'}" ]]
失控bash
进程不能用SIGINT
( Ctrl-C或kill -SIGINT $pid
) 或来中断SIGTERM
,但必须用 来终止SIGKILL
。
我尝试使用检查值
uniname -bcp <<<"$var"
但这也悬而未决。uniname
但是,可以用 杀死SIGINT
。
我还检查了其他一些基本命令,但它们都工作正常:
echo "$var"
printf '%q\n' "$var"
touch -- "$var"
rm -- "$var"
这里发生了什么?这可以被其他人复制吗?这是定义的行为吗?