控制字符
改变终端或文件显示的一些行为。一个控制符是由 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:] 来寻找和操作空白符。
网友评论