包含控制字符的字符串文本



我正在创建一种交互式教程,其工作原理如下:

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 脚本。

您有几种方法:

  1. 使用 bash 的 ANSI C 扩展:

    if [ "$ans" == $'eb' ];
    
  2. 在大多数 Unix 终端上,您可以按 CtrlV 进入逐字模式,其中逐字输入下一个字符。因此,按 CtrlV,然后按 Esc,然后您应该输入一个文字 Esc 字符。根据您的编辑器,它可能显示为 ^[ .
  3. 使用 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

最新更新