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

时间:2016-02-10 22:51:49

标签: bash control-characters

我正在创建一种类似于以下内容的交互式教程:

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十进制)? ESC肯定不起作用。

我理解我最好使用另一种语言,但这是一项任务,需要使用bash脚本。

2 个答案:

答案 0 :(得分:3)

在bash中,您可以使用$'...'引号:

echo $'\eb' | xxd

与输入 Alt + b 输入进行比较

read x
echo "$x" | xxd

答案 1 :(得分:3)

你有几种方法:

  1. 使用bash的ANSI C expansions

    if [ "$ans" == $'\eb' ];
    
  2. 在大多数Unix终端上,您可以按 Ctrl V 进入逐字模式,逐字输入下一个字符。因此,按 Ctrl V ,然后按 Esc ,然后您应该输入文字 Esc 字符。根据您的编辑器,它可能会显示为^[
  3. 使用printf,可以解释various character sequences

    $ printf '%b' '\e' | od -c
    0000000 033
    0000001
    $ printf '%b' '\033' | od -c
    0000000 033
    0000001
    $ printf '%b' '\x1B' | od -c
    0000000 033
    0000001