zsh-字符串常用操作
zsh 的字符串处理功能,要比绝大多数编程语言自带的字符串函数库或者类库要强大(在不依赖外部命令的情况)。同时各种用法也比较怪异,很多时候简洁性和可读性是有矛盾的,很难兼顾。而 shell 的使用场景决定简洁性是不能被牺牲掉的,即使用 Python 这样比较简洁的语言来处理字符串,很多时候也只能写出冗长的代码,而 zsh 经常可以一行搞定(可能有人想到了 Perl,Perl 在处理文本方面确实有比较明显的优势,但使用 Perl 的话也要承担更多的成本),如果再加上适当地使用外部命令,基本可以应付大多数字符串处理场景。因为字符串处理的内容比较丰富,我会分多篇文章写。本篇只涉及最基础和常用的字符串操作,包括字符串的拼接、切片、截断、查找、遍历、替换、匹配、大小写转换、分隔等等。
字符串长度
% str=abcde
% echo $#str
5
# 读取函数或者脚本的第一个参数的长度
% echo $#1字符串拼接
% str1=abc
% str2=def
% str2+=$str1
% echo $str2
defabc
% str3=$str1$str2
abcdefabc字符串切片
字符串切片还有另一种风格的方法,即 bash 风格,功能大同小异。通常没有必要用这个,而且因为字符位置是从 0 开始算,容易混淆。
字符串截断
字符串查找
子字符串定位。
遍历字符
字符串替换
按内容替换和删除字符。
判断字符串变量是否存在
如果用 [[ "$strxx" == "" ]] ,那无法区分变量是没有定义还是内容为空,在某些情况是需要区分二者的。
(($+var)) 的用法也可以用来判断其他类型的变量,如果变量存在则返回真(0),否则返回假(1)。
字符串匹配判断
判断是否包含字符串
正则表达式匹配
大小写转换
目录文件名截取
字符串分隔
多行字符串
读取文件内容到字符串
读取文件指定行
文件 test.txt 内容如下:
读取进程输出到字符串
读进程输出和读文件类似。
上边字符串相关的处理,直接把 $(<test.txt) 换成 $(命令) 即可。如果一定需要一个文件名,可以这样。