我正在创建一种交互式教程,其工作原理如下:
echo "What do you press if you want to move one word backwords in bash?"
read ans
if [ "$ans" == "ESCb" ]; then
echo RIGHT!
else
echo WRONG!
fi
现在,如何在字符串文字中输入 ESC 字符(ASCII 27 十进制)? ESC
当然行不通。
我知道我可能最好使用另一种语言,但这是一个作业,它必须是 bash 脚本。
您有几种方法:
-
使用 bash 的 ANSI C 扩展:
if [ "$ans" == $'eb' ];
- 在大多数 Unix 终端上,您可以按 CtrlV 进入逐字模式,其中逐字输入下一个字符。因此,按 CtrlV,然后按 Esc,然后您应该输入一个文字 Esc 字符。根据您的编辑器,它可能显示为
^[
. -
使用
printf
,它可以解释各种字符序列:$ printf '%b' 'e' | od -c 0000000 033 0000001 $ printf '%b' ' 33' | od -c 0000000 033 0000001 $ printf '%b' 'x1B' | od -c 0000000 033 0000001
在 bash 中,您可以使用$'...'
引号:
echo $'eb' | xxd
与输入 Alt+b进行比较 输入到
read x
echo "$x" | xxd