|
@@ -1,6 +1,6 @@
|
|
|
### 导读
|
|
|
|
|
|
-上一篇讲了 zsh 的常用字符串操作,这篇开始讲更为琐碎的转义字符和格式化输出相关内容。包括转义字符、引号、print、printf 的使用等等。其中很多内容没有必要记忆,作为手册参考即可。
|
|
|
+上一篇讲了 zsh 的常用字符串操作,这篇开始讲更为琐碎的转义字符和格式化输出相关内容。包括转义字符、引号、`print`、`printf` 的使用等等。其中很多内容没有必要记忆,作为手册参考即可。
|
|
|
|
|
|
### 转义字符
|
|
|
|
|
@@ -18,14 +18,14 @@ Hello
|
|
|
|
|
|
常用转义字符对照表,不常用的可以去查 ASCII 码表,然后使用 `\xnn`(如 `\x14`)。
|
|
|
|
|
|
-| 转义字符 | 含义 | ASCII 码值(十六进制)|
|
|
|
-| -------- |---------- | --------------------- |
|
|
|
-| \n | 换行 | 0a |
|
|
|
-| \r | 回车 | 0d |
|
|
|
-| \t | tab | 09 |
|
|
|
-| \\\\ | \ | 5c |
|
|
|
-| \\` | ` | 60 |
|
|
|
-| \\xnn | 取决于 nn | nn |
|
|
|
+| 转义字符 | 含义 | ASCII 码值(十六进制) |
|
|
|
+| ----- | ------ | -------------- |
|
|
|
+| \n | 换行 | 0a |
|
|
|
+| \r | 回车 | 0d |
|
|
|
+| \t | tab | 09 |
|
|
|
+| \\\\ | \ | 5c |
|
|
|
+| \\` | ` | 60 |
|
|
|
+| \\xnn | 取决于 nn | nn |
|
|
|
|
|
|
可以用 `hexdump` 命令查看字符的 ASCII 码值。
|
|
|
|
|
@@ -93,7 +93,7 @@ Mon Aug 28 09:49:11 CST 2017
|
|
|
3
|
|
|
```
|
|
|
|
|
|
-简单说,$ 加各种东西的用法在双引号里都是可以正常使用的,而其他特殊符号(比如 `*`、`?`、`>`)的功能通常不可用。
|
|
|
+简单说,`$` 加各种东西的用法在双引号里都是可以正常使用的,而其他特殊符号(比如 `*`、`?`、`>`)的功能通常不可用。
|
|
|
|
|
|
### 反引号
|
|
|
|
|
@@ -116,9 +116,9 @@ tmp
|
|
|
|
|
|
### print 命令用法
|
|
|
|
|
|
-print 是类似 echo 的内部命令(echo 命令很简单,不作介绍),但功能比 echo 强大很多。完全可以使用 print 代替 echo。
|
|
|
+`print` 是类似 `echo` 的内部命令(`echo` 命令很简单,不作介绍),但功能比 `echo` 强大很多。完全可以使用 `print` 代替 `echo`。
|
|
|
|
|
|
-不加参数的 print 和 echo 的功能基本一样,但如果字符串里包含转义字符,某些情况可能不一致。如果需要输出转义字符,尽量统一使用 print,避免不一致导致的麻烦。
|
|
|
+不加参数的 `print` 和 `echo` 的功能基本一样,但如果字符串里包含转义字符,某些情况可能不一致。如果需要输出转义字符,尽量统一使用 `print`,避免不一致导致的麻烦。
|
|
|
|
|
|
```
|
|
|
% print 'Line\tone\n\Line\ttwo'
|
|
@@ -131,7 +131,7 @@ Line one
|
|
|
\Line two
|
|
|
```
|
|
|
|
|
|
-print 有很多参数,在 zsh 里输入 print - 然后按 tab 即可查看选项帮助(如果没有效果,需要配置 .zshrc 里的补全选项,网上有很多现成的配置)。
|
|
|
+`print` 有很多参数,在 zsh 里输入 `print -` 然后按 tab 即可查看选项帮助(如果没有效果,需要配置 `~/.zshrc` 里的补全选项,网上有很多现成的配置)。
|
|
|
|
|
|
```
|
|
|
# - 后直接按 tab,C 是补全上去的
|
|
@@ -145,9 +145,9 @@ print 有很多参数,在 zsh 里输入 print - 然后按 tab 即可查看选
|
|
|
|
|
|
### print 命令选项功能介绍
|
|
|
|
|
|
-这里以常用程度的顺序依次介绍所有的选项,另外文末有“print 选项列表”方便查询。
|
|
|
+这里以常用程度的顺序依次介绍所有的选项,另外文末有“`print` 选项列表”方便查询。
|
|
|
|
|
|
--l 用于分行输出字符串。
|
|
|
+`-l` 用于分行输出字符串:
|
|
|
|
|
|
```
|
|
|
# 每个字符串一行,字符串是用空格隔开的
|
|
@@ -163,7 +163,7 @@ aa
|
|
|
bb
|
|
|
```
|
|
|
|
|
|
--n 用于不在输出内容的末尾自动添加换行符(echo 命令也有这个用法)。
|
|
|
+`-n` 用于不在输出内容的末尾自动添加换行符(`echo` 命令也有这个用法):
|
|
|
|
|
|
```
|
|
|
% print abc
|
|
@@ -173,14 +173,14 @@ abc
|
|
|
abc%
|
|
|
```
|
|
|
|
|
|
--m 用于只输出匹配到的字符串。
|
|
|
+`-m` 用于只输出匹配到的字符串:
|
|
|
|
|
|
```
|
|
|
% print -m "aa*" aabb abc aac
|
|
|
aabb aac
|
|
|
```
|
|
|
|
|
|
--o/-O/-i 用于对字符串排序。
|
|
|
+`-o/-O/-i` 用于对字符串排序:
|
|
|
|
|
|
```
|
|
|
# print -o 对字符串升序排列
|
|
@@ -200,14 +200,14 @@ A a A B B C c C
|
|
|
a A A B B c C C
|
|
|
```
|
|
|
|
|
|
--r 用于不对字符串进行转义。print 默认是会对转义字符进行转义的,加 -r 后会原样输出。
|
|
|
+`-r` 用于不对字符串进行转义。`print` 默认是会对转义字符进行转义的,加 `-r` 后会原样输出:
|
|
|
|
|
|
```
|
|
|
% print -r '\n'
|
|
|
\n
|
|
|
```
|
|
|
|
|
|
--c 用于将字符串按列输出。如果对自动决定的列数不满意,可以用 -C 指定列数。
|
|
|
+`-c` 用于将字符串按列输出。如果对自动决定的列数不满意,可以用 `-C` 指定列数:
|
|
|
|
|
|
```
|
|
|
% print -c a bbbbb ccc ddddd ee ffffff gg hhhhhh ii jj kk
|
|
@@ -215,7 +215,7 @@ a ccc ee gg ii kk
|
|
|
bbbbb ddddd ffffff hhhhhh jj
|
|
|
```
|
|
|
|
|
|
--C 用于按指定列数输出字符串。
|
|
|
+`-C` 用于按指定列数输出字符串:
|
|
|
|
|
|
```
|
|
|
# 从上到下
|
|
@@ -235,7 +235,7 @@ dddd ee f
|
|
|
g
|
|
|
```
|
|
|
|
|
|
--D 用于将符合条件的路径名转化成带 ~ 的格式,~ 是家目录。
|
|
|
+`-D` 用于将符合条件的路径名转化成带 ~ 的格式(~ 是家目录):
|
|
|
|
|
|
```
|
|
|
% print -D /home/goreliu/git
|
|
@@ -246,7 +246,7 @@ g
|
|
|
~mine
|
|
|
```
|
|
|
|
|
|
--N 用于将输出的字符串以 `\x00`(null)分隔,而不是空格。这样可能方便处理包含空格的字符串,xargs 等命令也可以接受以 `\x00` 分隔的字符串。
|
|
|
+`-N` 用于将输出的字符串以 `\x00`(null)分隔,而不是空格。这样可能方便处理包含空格的字符串,`xargs` 等命令也可以接受以 `\x00` 分隔的字符串:
|
|
|
|
|
|
```
|
|
|
% print -N aa bb cc
|
|
@@ -257,7 +257,7 @@ aabbcc%
|
|
|
00000009
|
|
|
```
|
|
|
|
|
|
--x 用于将行首的 tab 替换成空格。-x 是将行首的 tab 展开成空格,- x 后的参数是一个 tab 对应的空格数。
|
|
|
+`-x` 用于将行首的 tab 替换成空格。`-x` 是将行首的 tab 展开成空格,`-x` 后的参数是一个 tab 对应的空格数:
|
|
|
|
|
|
```
|
|
|
% print -x 2 '\t\tabc' | hexdump -C
|
|
@@ -269,7 +269,7 @@ aabbcc%
|
|
|
0000000c
|
|
|
```
|
|
|
|
|
|
--X 用于将所有的 tab 替换成空格。注意不是简单地替换成空格。比如每行有一个 tab,-X 8,那么如果 tab 前(到行首或者上一个 tab)有 5 个字符,就补全 3 个空格,凑够 8,这么做是为了对齐每一列的。但如果前边有 8 个或者 8 个以上字符,那么依然是一个 tab 替换成 8 个字符,因为 tab 不能凭空消失,一定要转成至少一个空格才行。如果没理解就自己多试试找规律吧。
|
|
|
+`-X` 用于将所有的 tab 替换成空格。注意不是简单地替换成空格。比如每行有一个 tab,`-X 8`,那么如果 tab 前(到行首或者上一个 tab)有 5 个字符,就补全 3 个空格,凑够 8,这么做是为了对齐每一列的。但如果前边有 8 个或者 8 个以上字符,那么依然是一个 tab 替换成 8 个字符,因为 tab 不能凭空消失,一定要转成至少一个空格才行。如果没理解就自己多试试找规律吧。
|
|
|
|
|
|
```
|
|
|
% print -X 2 'ab\t\tabc' | hexdump -C
|
|
@@ -281,7 +281,7 @@ aabbcc%
|
|
|
0000000c
|
|
|
```
|
|
|
|
|
|
--u 用于指定 fd 输出。print 默认输出到 fd 1,即 stdout,可以指定成其他 fd(2 是 stderr,其他的可以运行 `ls -l /proc/$$/fd` 查看。
|
|
|
+`-u` 用于指定 fd 输出。`print` 默认输出到 fd 1,即 stdout,可以指定成其他 fd(2 是 stderr,其他的可以运行 `ls -l /proc/$$/fd` 查看。
|
|
|
|
|
|
```
|
|
|
% print -u 2 good
|
|
@@ -291,7 +291,7 @@ good
|
|
|
% print good >&2
|
|
|
```
|
|
|
|
|
|
--v 用于把输出内容保存到变量。
|
|
|
+`-v` 用于把输出内容保存到变量:
|
|
|
|
|
|
```
|
|
|
# 和 str="$(print aa bb cc)" 效果一样
|
|
@@ -300,7 +300,7 @@ good
|
|
|
aa bb cc
|
|
|
```
|
|
|
|
|
|
--s/-S 用于把字符串保存到历史记录。
|
|
|
+`-s/-S` 用于把字符串保存到历史记录:
|
|
|
|
|
|
```
|
|
|
% print -s ls -a
|
|
@@ -313,7 +313,7 @@ aa bb cc
|
|
|
2339 ls -a
|
|
|
```
|
|
|
|
|
|
--z 用于把字符串输出到命令行编辑区。
|
|
|
+`-z` 用于把字符串输出到命令行编辑区:
|
|
|
|
|
|
```
|
|
|
# _是光标位置
|
|
@@ -321,17 +321,17 @@ aa bb cc
|
|
|
% aa bb cc_
|
|
|
```
|
|
|
|
|
|
--f 用于按指定格式化字符串输出,同 printf,用法见“printf 命令用法”。
|
|
|
+`-f` 用于按指定格式化字符串输出,同 `printf`,用法见“`printf` 命令用法”。
|
|
|
|
|
|
--P 用于输出带颜色和特殊样式的字符串,见“输出带颜色和特殊样式的字符串”。
|
|
|
+`-P` 用于输出带颜色和特殊样式的字符串,见“输出带颜色和特殊样式的字符串”。
|
|
|
|
|
|
--b 用于辨认出 bindkey 中的转义字符串,bindkey 是 Zle 的快捷键配置内容,写脚本用不到,不作介绍。
|
|
|
+`-b` 用于辨认出 bindkey 中的转义字符串,bindkey 是 Zle 的快捷键配置内容,写脚本用不到,不作介绍。
|
|
|
|
|
|
--R 用于模拟 echo 命令,只支持 -n 和 -e 选项,通常用不到。
|
|
|
+`-R` 用于模拟 `echo` 命令,只支持 `-n` 和 `-e` 选项,通常用不到。
|
|
|
|
|
|
### printf 命令用法
|
|
|
|
|
|
-printf 命令很像 c 语言的 printf 函数,用于输出格式化后的字符串。
|
|
|
+`printf` 命令很像 c 语言的 `printf` 函数,用于输出格式化后的字符串:
|
|
|
|
|
|
```
|
|
|
# 输出末尾的 % 代表该行末尾没有换行符
|
|
@@ -341,7 +341,7 @@ printf 命令很像 c 语言的 printf 函数,用于输出格式化后的字
|
|
|
:12 34.560000:%
|
|
|
```
|
|
|
|
|
|
-printf 的第一个参数是格式化字符串,在 zsh 里输入 printf % 后按 tab,可以看到所有支持的用法。下面只举几个比较常用的例子。
|
|
|
+`printf` 的第一个参数是格式化字符串,在 zsh 里输入 `printf %` 后按 tab,可以看到所有支持的用法。下面只举几个比较常用的例子:
|
|
|
|
|
|
```
|
|
|
# 整数 浮点数 字符串
|
|
@@ -366,7 +366,7 @@ c
|
|
|
00012
|
|
|
```
|
|
|
|
|
|
-我把完整的格式贴在这里,方便搜索。
|
|
|
+我把完整的格式贴在这里,方便搜索:
|
|
|
|
|
|
```
|
|
|
-- print format specifier --
|
|
@@ -395,7 +395,7 @@ X x -- unsigned hexadecimal number, letters capitalized as x
|
|
|
|
|
|
### 输出带颜色和特殊样式的字符串
|
|
|
|
|
|
-用 zsh 的 print -P 可以方便地输出带颜色和特殊样式的字符串,不用再和 `\033[41;36;1m` 之类莫名其妙的字符串打交道了。
|
|
|
+用 zsh 的 `print -P` 可以方便地输出带颜色和特殊样式的字符串,不用再和 `\033[41;36;1m` 之类莫名其妙的字符串打交道了。
|
|
|
|
|
|
```
|
|
|
# %B 加粗 %b 取消加粗
|
|
@@ -426,33 +426,33 @@ abc
|
|
|
|
|
|
### print 选项列表
|
|
|
|
|
|
-为了方便查询,我把 print 的选项列表放在这里。
|
|
|
-
|
|
|
-| 选项 | 功能 | 参数 |
|
|
|
-| ----- | ----------------------------------- | ---------------|
|
|
|
-| -C | 按列输出 | 列数 |
|
|
|
-| -D | 替换路径成带 ~ 的版本 | 无 |
|
|
|
-| -N | 使用 \x00 作为字符串的间隔 | 无 |
|
|
|
-| -O | 降序排列 | 无 |
|
|
|
-| -P | 输出颜色和特殊样式 | 无 |
|
|
|
-| -R | 模拟 echo 命令 | 无 |
|
|
|
-| -S | 放命令放入历史命令文件(要加引号) | 无 |
|
|
|
-| -X | 替换所有 tab 为空格 | tab 对应空格数 |
|
|
|
-| -a | 和 -c/-C 一起使用时,改为从左到右 | 无 |
|
|
|
-| -b | 识别出 bindkey 转义字符串 | 无 |
|
|
|
-| -c | 按列输出(自动决定列数) | 无 |
|
|
|
-| -f | 同 printf | 无 |
|
|
|
-| -i | 和 -o/-O 一起用时,大小写不敏感排序 | 无 |
|
|
|
-| -l | 使用换行符作为字符串分隔符 | 无 |
|
|
|
-| -m | 只输出匹配的字符串 | 匹配模式字符串 |
|
|
|
-| -n | 不自动添加最后的换行符 | 无 |
|
|
|
-| -o | 升序排列 | 无 |
|
|
|
-| -r | 不处理转义字符 | 无 |
|
|
|
-| -s | 放命令放入历史命令文件(不加引号) | 无 |
|
|
|
-| -u | 指定 fd 输出 | fd 号 |
|
|
|
-| -v | 把内容保存到变量 | 变量名 |
|
|
|
-| -x | 替换行首的 tab 为空格 | tab 对应空格数 |
|
|
|
-| -z | 把内容放置到命令行编辑区 | 无 |
|
|
|
+为了方便查询,我把 `print` 的选项列表放在这里:
|
|
|
+
|
|
|
+| 选项 | 功能 | 参数 |
|
|
|
+| ---- | --------------------- | --------- |
|
|
|
+| -C | 按列输出 | 列数 |
|
|
|
+| -D | 替换路径成带 ~ 的版本 | 无 |
|
|
|
+| -N | 使用 \x00 作为字符串的间隔 | 无 |
|
|
|
+| -O | 降序排列 | 无 |
|
|
|
+| -P | 输出颜色和特殊样式 | 无 |
|
|
|
+| -R | 模拟 echo 命令 | 无 |
|
|
|
+| -S | 放命令放入历史命令文件(要加引号) | 无 |
|
|
|
+| -X | 替换所有 tab 为空格 | tab 对应空格数 |
|
|
|
+| -a | 和 -c/-C 一起使用时,改为从左到右 | 无 |
|
|
|
+| -b | 识别出 bindkey 转义字符串 | 无 |
|
|
|
+| -c | 按列输出(自动决定列数) | 无 |
|
|
|
+| -f | 同 printf | 无 |
|
|
|
+| -i | 和 -o/-O 一起用时,大小写不敏感排序 | 无 |
|
|
|
+| -l | 使用换行符作为字符串分隔符 | 无 |
|
|
|
+| -m | 只输出匹配的字符串 | 匹配模式字符串 |
|
|
|
+| -n | 不自动添加最后的换行符 | 无 |
|
|
|
+| -o | 升序排列 | 无 |
|
|
|
+| -r | 不处理转义字符 | 无 |
|
|
|
+| -s | 放命令放入历史命令文件(不加引号) | 无 |
|
|
|
+| -u | 指定 fd 输出 | fd 号 |
|
|
|
+| -v | 把内容保存到变量 | 变量名 |
|
|
|
+| -x | 替换行首的 tab 为空格 | tab 对应空格数 |
|
|
|
+| -z | 把内容放置到命令行编辑区 | 无 |
|
|
|
|
|
|
### 参考
|
|
|
|