\0nnn the eight-bit character whose value is the octal value
nnn (zero to three octal digits)
\nnn the eight-bit character whose value is the octal value
nnn (one to three octal digits)
在用转义符\开头的一到三位数字都要作为八进制数字来看待,\0开头的也类似,但只不必非得跟一个数字而已。但八进制中只能用到[0-7]这些数字,如果有8、9、a、A之类的那肯定是错误字符了。所以bash在分析\0106这个字符串时,因为0、1、0、6都是“octal digits”,并且位数在“zero to three”之间,所以合法,可以输出。bash在分析\0108这个字符串时则不然,0、1、0都是合法的,但到8这里就不对了,所以bash只把前面已经确认的\010作为一个有效的“八进制数字转义字符”来使用,字符8则只是在这个“八进制数字转义字符”后面一个无关的普通字符了。所以bash打印\0108时,先打印转义字符\010,这是一个控制字符,表示退格,所以把先前输出的字符G(也就是\0107)抹掉了;紧接着,bash输出下面的字符,也就是8。同理,输出\0109也是类似,一个退格紧跟一个字符9。需要注意的是,这次的退格把刚输出的字符8也抹掉了。
所以会出现“…EF9HI…”这样古怪的输出序列。后面的\0118、\0128之类大家就可以自己分析一下了。