美文网首页
Shell基础脚本-控制字符

Shell基础脚本-控制字符

作者: Chris0Yang | 来源:发表于2021-11-14 13:28 被阅读0次

    控制字符

    改变终端或文件显示的一些行为。一个控制符是由 CONTRL + key 组成的(同时按下),控制字符同样可以通过转义以八进制或十六进制的方式显示。
    控制符不能在脚本中使用
    Ctrl-A
    移动光标至行首

    Ctrl-B
    非破坏性退格(即不删除字符)

    Ctrl-C
    中断指令。终止当前运行的任务

    Ctrl-D
    登出shell(类似 exit)
    键入 EOF(end-of-file,文件终止标记),中断 stdin 的输入。
    当你在终端或 xterm 窗口中输入字符时,Ctl-D 将会删除光标上的字符。当没有字符时,Crl-D 将会登出shell。在 xterm 中,将会关闭整个窗口

    Ctrl-E
    移动光标至行末

    Ctrl-F
    光标向前移动一个字符

    Ctrl-G
    响铃BEL。在一些老式打字机终端上,将会响铃。而在 xterm 中,将会产生“哔”声

    Ctrl-H
    抹除(破坏性退格)。退格删除前面的字符。

    #!/bin/bash
    # 在字符串中嵌入 Ctrl-H
    
    a="^H^H"                  # 两个退格符 Ctrl-H
                              # 在 vi/vim 中使用 Ctrl-V Ctrl-H 来键入
    echo "abcdef"             # abcdef
    echo
    echo -n "abcdef$a "       # abcd f
    #                ^              ^ 末尾有空格退格两次的结果
    echo
    echo -n "abcdef$a"        # abcdef
    #                                ^ 末尾没有空格时为什么退格无效了?
                              # 并不是我们期望的结果。
    echo; echo
    
    # Constantin Hagemeier 建议尝试一下:
    # a=$'\010\010'
    # a=$'\b\b'
    # a=$'\x08\x08'
    # 但是这些并不会改变结果。
    
    ########################################
    
    # 现在来试试这个。
    
    rubout="^H^H^H^H^H"       # 5个 Ctrl-H
    
    echo -n "12345678"
    sleep 2
    echo -n "$rubout"
    sleep 2
    

    Ctrl-I
    水平制表符

    Ctrl-J
    另起一行(换行)。在脚本中,你也可使用八进制 '\012' 或者十六进制 '\x0a' 来表示

    Ctrl-K
    垂直制表符

    当你在终端或 xterm 窗口中输入字符时,Ctrl-K 将会删除光标上及其后的所有字符。而在脚本中,Ctrl-K 的作用有些不同。具体查看下方 Lee Lee Maschmeyer 写的样例

    Ctrl-L
    清屏、走纸。在终端中等同于 clear 命令。在打印时,Ctrl-L 将会使纸张移动到底部。

    Ctrl-M
    回车(CR)

    #!/bin/bash
    # 感谢 Lee Maschmeyer 提供的样例。
    
    read -n 1 -s -p \
    $'Control-M leaves cursor at beginning of this line. Press Enter. \x0d'
               # '0d' 是 Control-M 的十六进制的值
    echo >&2   # '-s' 参数禁用了回显,所以需要显式的另起一行。
    
    read -n 1 -s -p $'Control-J leaves cursor on next line. \x0a'
               # '0a' 是 Control-J 换行符的十六进制的值
    echo >&2
    
    ###
    
    read -n 1 -s -p $'And Control-K\x0bgoes straight down.'
    echo >&2   # Control-K 是垂直制表符。
    
    # 一个更好的垂直制表符例子是:
    
    var=$'\x0aThis is the bottom line\x0bThis is the top line\x0a'
    echo "$var"
    #  这将会产生与上面的例子类似的结果。但是
    echo "$var" | col
    #  这却会使得右侧行高于左侧行。
    #  这也解释了为什么我们需要在行首和行尾加上换行符
    #  来避免显示的混乱。
    
    # Lee Maschmeyer 的解释:
    # --------------------------
    #  在第一个垂直制表符的例子中,垂直制表符使其
    #  在没有回车的情况下向下打印。
    #  这在那些不能回退的设备上,例如 Linux 的终端才可以。
    #  而垂直制表符的真正目的是向上而非向下。
    #  它可以用来在打印机中用来打印上标。
    #  col 工具可以用来模拟真实的垂直制表符行为。
    
    exit 0
    

    Ctrl-N
    在命令行历史记录中调用下一条历史命令

    Ctrl-O
    在命令行中另起一行

    Ctrl-P
    在命令行历史记录中调用上一条历史命令

    Ctrl-Q
    恢复(XON)
    终端恢复读入 stdin

    Ctrl-R
    在命令行历史记录中进行搜索

    Ctrl-S
    挂起(XOFF)
    终端冻结 stdin。(可以使用 Ctrl-Q 恢复)

    Ctrl-T
    交换光标所在字符与其前一个字符

    Ctrl-U
    删除光标所在字符之前的所有字符。 在一些情况下,不管光标在哪个位置,Ctrl-U 都会删除整行文字

    Ctrl-V
    输入时,使用 Ctrl-V 允许插入控制字符。例如,下面两条语句是等价的:

    echo -e '\x0a'
    echo <Ctrl-V><Ctrl-J>
    

    Ctrl-V 在文本编辑器中特别有用

    Ctrl-W
    当你在终端或 xterm 窗口中输入字符时,Ctrl-W 将会删除光标所在字符之前到其最近的空白符之间的所有字符。 在一些情况下,Ctrl-W 会删除到之前最近的非字母或数字的字符

    Ctrl-X
    在一些特定的文本处理程序中,剪切高亮文本并复制到剪贴板(clipboard)

    Ctrl-Y
    粘贴之前使用 Ctrl-U 或 Ctrl-W 删除的文字

    Ctrl-Z
    暂停当前运行的任务
    在一些特定的文本处理程序中是替代操作
    在 MSDOS 文件系统中作为 EOF(end-of-file,文件终止标记)

    空白符

    作为命令或变量之间的分隔符。空白符包含空格、制表符、换行符或它们的任意组合。在一些地方,比如变量赋值时,空白符不应该出现,否则会造成语法错误

    空白行在脚本中不会有任何实际作用,但是可以划分代码,使代码更具可读性

    特殊变量 $IFS 是作为一些特定命令的输入域(field)分隔符,默认值为空白符

    定义:域是字符串中离散的数据块。使用空白符或者指定的字符(通常由 $IFS 决定)来分隔临近域。在一些情况下,域也可以被称作记录(record)

    如果想在字符串或者变量中保留空白符,请引用

    UNIX 过滤器可以使用 POSIX 字符类 [:space:] 来寻找和操作空白符。

    相关文章

      网友评论

          本文标题:Shell基础脚本-控制字符

          本文链接:https://www.haomeiwen.com/subject/ayzttrtx.html