美文网首页
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