Shell基础脚本-控制字符

控制字符

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

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 219,701评论 6 508
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,649评论 3 396
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 166,037评论 0 356
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,994评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,018评论 6 395
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,796评论 1 308
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,481评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,370评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,868评论 1 319
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,014评论 3 338
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,153评论 1 352
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,832评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,494评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,039评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,156评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,437评论 3 373
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,131评论 2 356

推荐阅读更多精彩内容