Gore Liu 6 years ago
parent
commit
58d700f47c
2 changed files with 237 additions and 0 deletions
  1. 222 0
      00_Zsh-开发指南(目录).md
  2. 15 0
      maketoc

+ 222 - 0
00_Zsh-开发指南(目录).md

@@ -0,0 +1,222 @@
+# Zsh 开发指南 目录
+## [第一篇 变量和语句](01_Zsh-开发指南(第一篇-变量和语句).md)
+### [导读](01_Zsh-开发指南(第一篇-变量和语句).md#导读)
+### [为什么用 zsh 写脚本](01_Zsh-开发指南(第一篇-变量和语句).md#为什么用-zsh-写脚本)
+### [Zsh 脚本样例](01_Zsh-开发指南(第一篇-变量和语句).md#Zsh-脚本样例)
+### [为什么要使用 shell 脚本语言](01_Zsh-开发指南(第一篇-变量和语句).md#为什么要使用-shell-脚本语言)
+### [格式约定](01_Zsh-开发指南(第一篇-变量和语句).md#格式约定)
+### [变量](01_Zsh-开发指南(第一篇-变量和语句).md#变量)
+-  [变量定义](01_Zsh-开发指南(第一篇-变量和语句).md#变量定义)
+-  [变量比较](01_Zsh-开发指南(第一篇-变量和语句).md#变量比较)
+### [语句](01_Zsh-开发指南(第一篇-变量和语句).md#语句)
+-  [条件语句](01_Zsh-开发指南(第一篇-变量和语句).md#条件语句)
+-  [循环语句](01_Zsh-开发指南(第一篇-变量和语句).md#循环语句)
+-  [分支语句](01_Zsh-开发指南(第一篇-变量和语句).md#分支语句)
+-  [用户输入选择语句](01_Zsh-开发指南(第一篇-变量和语句).md#用户输入选择语句)
+-  [异常处理语句](01_Zsh-开发指南(第一篇-变量和语句).md#异常处理语句)
+-  [简化的条件语句](01_Zsh-开发指南(第一篇-变量和语句).md#简化的条件语句)
+### [总结](01_Zsh-开发指南(第一篇-变量和语句).md#总结)
+## [第二篇 字符串处理之常用操作](02_Zsh-开发指南(第二篇-字符串处理之常用操作).md)
+### [导读](02_Zsh-开发指南(第二篇-字符串处理之常用操作).md#导读)
+### [字符串长度](02_Zsh-开发指南(第二篇-字符串处理之常用操作).md#字符串长度)
+### [字符串拼接](02_Zsh-开发指南(第二篇-字符串处理之常用操作).md#字符串拼接)
+### [字符串切片](02_Zsh-开发指南(第二篇-字符串处理之常用操作).md#字符串切片)
+### [字符串截断](02_Zsh-开发指南(第二篇-字符串处理之常用操作).md#字符串截断)
+### [字符串查找](02_Zsh-开发指南(第二篇-字符串处理之常用操作).md#字符串查找)
+### [遍历字符](02_Zsh-开发指南(第二篇-字符串处理之常用操作).md#遍历字符)
+### [字符串替换](02_Zsh-开发指南(第二篇-字符串处理之常用操作).md#字符串替换)
+### [判断字符串变量是否存在](02_Zsh-开发指南(第二篇-字符串处理之常用操作).md#判断字符串变量是否存在)
+### [字符串匹配判断](02_Zsh-开发指南(第二篇-字符串处理之常用操作).md#字符串匹配判断)
+### [大小写转换](02_Zsh-开发指南(第二篇-字符串处理之常用操作).md#大小写转换)
+### [目录文件名截取](02_Zsh-开发指南(第二篇-字符串处理之常用操作).md#目录文件名截取)
+### [字符串分隔](02_Zsh-开发指南(第二篇-字符串处理之常用操作).md#字符串分隔)
+### [多行字符串](02_Zsh-开发指南(第二篇-字符串处理之常用操作).md#多行字符串)
+### [读取文件内容到字符串](02_Zsh-开发指南(第二篇-字符串处理之常用操作).md#读取文件内容到字符串)
+### [读取进程输出到字符串](02_Zsh-开发指南(第二篇-字符串处理之常用操作).md#读取进程输出到字符串)
+### [参考](02_Zsh-开发指南(第二篇-字符串处理之常用操作).md#参考)
+## [第三篇 字符串处理之转义字符和格式化输出](03_Zsh-开发指南(第三篇-字符串处理之转义字符和格式化输出).md)
+### [导读](03_Zsh-开发指南(第三篇-字符串处理之转义字符和格式化输出).md#导读)
+### [转义字符](03_Zsh-开发指南(第三篇-字符串处理之转义字符和格式化输出).md#转义字符)
+### [单引号](03_Zsh-开发指南(第三篇-字符串处理之转义字符和格式化输出).md#单引号)
+### [双引号](03_Zsh-开发指南(第三篇-字符串处理之转义字符和格式化输出).md#双引号)
+### [反引号](03_Zsh-开发指南(第三篇-字符串处理之转义字符和格式化输出).md#反引号)
+### [print 命令用法](03_Zsh-开发指南(第三篇-字符串处理之转义字符和格式化输出).md#print-命令用法)
+### [print 命令选项功能介绍](03_Zsh-开发指南(第三篇-字符串处理之转义字符和格式化输出).md#print-命令选项功能介绍)
+### [printf 命令用法](03_Zsh-开发指南(第三篇-字符串处理之转义字符和格式化输出).md#printf-命令用法)
+### [输出带颜色和特殊样式的字符串](03_Zsh-开发指南(第三篇-字符串处理之转义字符和格式化输出).md#输出带颜色和特殊样式的字符串)
+### [print 选项列表](03_Zsh-开发指南(第三篇-字符串处理之转义字符和格式化输出).md#print-选项列表)
+### [参考](03_Zsh-开发指南(第三篇-字符串处理之转义字符和格式化输出).md#参考)
+## [第四篇 字符串处理之通配符](04_Zsh-开发指南(第四篇-字符串处理之通配符).md)
+### [导读](04_Zsh-开发指南(第四篇-字符串处理之通配符).md#导读)
+### [通配符的基本用法](04_Zsh-开发指南(第四篇-字符串处理之通配符).md#通配符的基本用法)
+### [加强版通配符](04_Zsh-开发指南(第四篇-字符串处理之通配符).md#加强版通配符)
+### [总结](04_Zsh-开发指南(第四篇-字符串处理之通配符).md#总结)
+### [参考](04_Zsh-开发指南(第四篇-字符串处理之通配符).md#参考)
+## [第五篇 数组](05_Zsh-开发指南(第五篇-数组).md)
+### [导读](05_Zsh-开发指南(第五篇-数组).md#导读)
+### [数组定义](05_Zsh-开发指南(第五篇-数组).md#数组定义)
+### [元素读写](05_Zsh-开发指南(第五篇-数组).md#元素读写)
+### [数组拼接](05_Zsh-开发指南(第五篇-数组).md#数组拼接)
+### [数组遍历](05_Zsh-开发指南(第五篇-数组).md#数组遍历)
+### [数组切片](05_Zsh-开发指南(第五篇-数组).md#数组切片)
+### [元素查找](05_Zsh-开发指南(第五篇-数组).md#元素查找)
+### [元素排序](05_Zsh-开发指南(第五篇-数组).md#元素排序)
+### [去除重复元素](05_Zsh-开发指南(第五篇-数组).md#去除重复元素)
+### [使用连续字符或者数值构造数组](05_Zsh-开发指南(第五篇-数组).md#使用连续字符或者数值构造数组)
+### [从字符串构造数组](05_Zsh-开发指南(第五篇-数组).md#从字符串构造数组)
+### [从文件构造数组](05_Zsh-开发指南(第五篇-数组).md#从文件构造数组)
+### [从文件列表构造数组](05_Zsh-开发指南(第五篇-数组).md#从文件列表构造数组)
+### [数组交集差集](05_Zsh-开发指南(第五篇-数组).md#数组交集差集)
+### [数组交叉合并](05_Zsh-开发指南(第五篇-数组).md#数组交叉合并)
+### [对数组中的字符串进行统一的处理](05_Zsh-开发指南(第五篇-数组).md#对数组中的字符串进行统一的处理)
+### [总结](05_Zsh-开发指南(第五篇-数组).md#总结)
+### [参考](05_Zsh-开发指南(第五篇-数组).md#参考)
+### [更新历史](05_Zsh-开发指南(第五篇-数组).md#更新历史)
+## [第六篇 哈希表](06_Zsh-开发指南(第六篇-哈希表).md)
+### [导读](06_Zsh-开发指南(第六篇-哈希表).md#导读)
+### [哈希表定义](06_Zsh-开发指南(第六篇-哈希表).md#哈希表定义)
+### [元素读写](06_Zsh-开发指南(第六篇-哈希表).md#元素读写)
+### [哈希表拼接](06_Zsh-开发指南(第六篇-哈希表).md#哈希表拼接)
+### [哈希表遍历](06_Zsh-开发指南(第六篇-哈希表).md#哈希表遍历)
+### [元素查找](06_Zsh-开发指南(第六篇-哈希表).md#元素查找)
+### [元素排序](06_Zsh-开发指南(第六篇-哈希表).md#元素排序)
+### [从字符串、文件构造哈希表](06_Zsh-开发指南(第六篇-哈希表).md#从字符串、文件构造哈希表)
+### [对哈希表中的每个元素统一处理](06_Zsh-开发指南(第六篇-哈希表).md#对哈希表中的每个元素统一处理)
+### [总结](06_Zsh-开发指南(第六篇-哈希表).md#总结)
+## [第七篇 数值计算](07_Zsh-开发指南(第七篇-数值计算).md)
+### [导读](07_Zsh-开发指南(第七篇-数值计算).md#导读)
+### [整数和浮点数类型](07_Zsh-开发指南(第七篇-数值计算).md#整数和浮点数类型)
+### [运算符](07_Zsh-开发指南(第七篇-数值计算).md#运算符)
+### [数学函数](07_Zsh-开发指南(第七篇-数值计算).md#数学函数)
+### [参考](07_Zsh-开发指南(第七篇-数值计算).md#参考)
+## [第八篇 变量修饰语](08_Zsh-开发指南(第八篇-变量修饰语).md)
+### [导读](08_Zsh-开发指南(第八篇-变量修饰语).md#导读)
+### [变量修饰语的格式](08_Zsh-开发指南(第八篇-变量修饰语).md#变量修饰语的格式)
+### [变量默认值](08_Zsh-开发指南(第八篇-变量修饰语).md#变量默认值)
+### [数组拼接成字符串](08_Zsh-开发指南(第八篇-变量修饰语).md#数组拼接成字符串)
+### [字符串切分成数组](08_Zsh-开发指南(第八篇-变量修饰语).md#字符串切分成数组)
+### [输出变量类型](08_Zsh-开发指南(第八篇-变量修饰语).md#输出变量类型)
+-  [字符串、数组或哈希表嵌套取值](08_Zsh-开发指南(第八篇-变量修饰语).md#字符串、数组或哈希表嵌套取值)
+### [字符串内容作为变量名再取值](08_Zsh-开发指南(第八篇-变量修饰语).md#字符串内容作为变量名再取值)
+### [对齐或截断数组中的字符串](08_Zsh-开发指南(第八篇-变量修饰语).md#对齐或截断数组中的字符串)
+### [总结](08_Zsh-开发指南(第八篇-变量修饰语).md#总结)
+### [参考](08_Zsh-开发指南(第八篇-变量修饰语).md#参考)
+## [第九篇 函数和脚本](09_Zsh-开发指南(第九篇-函数和脚本).md)
+### [导读](09_Zsh-开发指南(第九篇-函数和脚本).md#导读)
+### [函数定义](09_Zsh-开发指南(第九篇-函数和脚本).md#函数定义)
+### [参数处理](09_Zsh-开发指南(第九篇-函数和脚本).md#参数处理)
+### [函数嵌套](09_Zsh-开发指南(第九篇-函数和脚本).md#函数嵌套)
+### [返回值](09_Zsh-开发指南(第九篇-函数和脚本).md#返回值)
+### [局部变量](09_Zsh-开发指南(第九篇-函数和脚本).md#局部变量)
+### [脚本](09_Zsh-开发指南(第九篇-函数和脚本).md#脚本)
+### [exit 命令](09_Zsh-开发指南(第九篇-函数和脚本).md#exit-命令)
+### [用 getopts 命令处理命令行选项](09_Zsh-开发指南(第九篇-函数和脚本).md#用-getopts-命令处理命令行选项)
+### [总结](09_Zsh-开发指南(第九篇-函数和脚本).md#总结)
+### [参考](09_Zsh-开发指南(第九篇-函数和脚本).md#参考)
+### [更新历史](09_Zsh-开发指南(第九篇-函数和脚本).md#更新历史)
+## [第十篇 文件查找和批量处理](10_Zsh-开发指南(第十篇-文件查找和批量处理).md)
+### [导读](10_Zsh-开发指南(第十篇-文件查找和批量处理).md#导读)
+### [简单例子](10_Zsh-开发指南(第十篇-文件查找和批量处理).md#简单例子)
+### [按文件属性查找](10_Zsh-开发指南(第十篇-文件查找和批量处理).md#按文件属性查找)
+### [通配符修饰语列表](10_Zsh-开发指南(第十篇-文件查找和批量处理).md#通配符修饰语列表)
+### [更复杂的用法](10_Zsh-开发指南(第十篇-文件查找和批量处理).md#更复杂的用法)
+-  [按文件时间查找文件](10_Zsh-开发指南(第十篇-文件查找和批量处理).md#按文件时间查找文件)
+-  [按文件大小查找文件](10_Zsh-开发指南(第十篇-文件查找和批量处理).md#按文件大小查找文件)
+-  [文件排序](10_Zsh-开发指南(第十篇-文件查找和批量处理).md#文件排序)
+-  [组合使用](10_Zsh-开发指南(第十篇-文件查找和批量处理).md#组合使用)
+### [文件批量重命名](10_Zsh-开发指南(第十篇-文件查找和批量处理).md#文件批量重命名)
+### [不展开通配符](10_Zsh-开发指南(第十篇-文件查找和批量处理).md#不展开通配符)
+### [总结](10_Zsh-开发指南(第十篇-文件查找和批量处理).md#总结)
+### [参考](10_Zsh-开发指南(第十篇-文件查找和批量处理).md#参考)
+### [更新历史](10_Zsh-开发指南(第十篇-文件查找和批量处理).md#更新历史)
+## [第十一篇 变量的进阶内容](11_Zsh-开发指南(第十一篇-变量的进阶内容).md)
+### [导读](11_Zsh-开发指南(第十一篇-变量的进阶内容).md#导读)
+### [typeset 命令](11_Zsh-开发指南(第十一篇-变量的进阶内容).md#typeset-命令)
+### [强制字符串内容为小写或者大写](11_Zsh-开发指南(第十一篇-变量的进阶内容).md#强制字符串内容为小写或者大写)
+### [设置变量为环境变量](11_Zsh-开发指南(第十一篇-变量的进阶内容).md#设置变量为环境变量)
+### [设置变量为只读变量](11_Zsh-开发指南(第十一篇-变量的进阶内容).md#设置变量为只读变量)
+### [设置数组不包含重复元素](11_Zsh-开发指南(第十一篇-变量的进阶内容).md#设置数组不包含重复元素)
+### [设置整数的位数](11_Zsh-开发指南(第十一篇-变量的进阶内容).md#设置整数的位数)
+### [进制转换](11_Zsh-开发指南(第十一篇-变量的进阶内容).md#进制转换)
+### [同时对多个变量赋相同的值](11_Zsh-开发指南(第十一篇-变量的进阶内容).md#同时对多个变量赋相同的值)
+### [绑定字符串和数组](11_Zsh-开发指南(第十一篇-变量的进阶内容).md#绑定字符串和数组)
+### [显示变量的定义方式](11_Zsh-开发指南(第十一篇-变量的进阶内容).md#显示变量的定义方式)
+### [什么地方该加双引号](11_Zsh-开发指南(第十一篇-变量的进阶内容).md#什么地方该加双引号)
+### [总结](11_Zsh-开发指南(第十一篇-变量的进阶内容).md#总结)
+### [参考](11_Zsh-开发指南(第十一篇-变量的进阶内容).md#参考)
+### [更新历史](11_Zsh-开发指南(第十一篇-变量的进阶内容).md#更新历史)
+## [第十二篇 [[ ]] 的用法](12_Zsh-开发指南(第十二篇-[[-]]-的用法).md)
+### [导读](12_Zsh-开发指南(第十二篇-[[-]]-的用法).md#导读)
+### [比较字符串](12_Zsh-开发指南(第十二篇-[[-]]-的用法).md#比较字符串)
+### [判断文件](12_Zsh-开发指南(第十二篇-[[-]]-的用法).md#判断文件)
+### [比较文件](12_Zsh-开发指南(第十二篇-[[-]]-的用法).md#比较文件)
+### [比较数值](12_Zsh-开发指南(第十二篇-[[-]]-的用法).md#比较数值)
+### [组合使用](12_Zsh-开发指南(第十二篇-[[-]]-的用法).md#组合使用)
+### [[ ] 符号](12_Zsh-开发指南(第十二篇-[[-]]-的用法).md#[-]-符号)
+### [总结](12_Zsh-开发指南(第十二篇-[[-]]-的用法).md#总结)
+### [参考](12_Zsh-开发指南(第十二篇-[[-]]-的用法).md#参考)
+## [第十三篇 管道和重定向](13_Zsh-开发指南(第十三篇-管道和重定向).md)
+### [导读](13_Zsh-开发指南(第十三篇-管道和重定向).md#导读)
+### [管道](13_Zsh-开发指南(第十三篇-管道和重定向).md#管道)
+### [关于管道的更多细节](13_Zsh-开发指南(第十三篇-管道和重定向).md#关于管道的更多细节)
+### [重定向](13_Zsh-开发指南(第十三篇-管道和重定向).md#重定向)
+### [更多重定向的用法](13_Zsh-开发指南(第十三篇-管道和重定向).md#更多重定向的用法)
+### [命名管道](13_Zsh-开发指南(第十三篇-管道和重定向).md#命名管道)
+### [exec 命令的用法](13_Zsh-开发指南(第十三篇-管道和重定向).md#exec-命令的用法)
+### [总结](13_Zsh-开发指南(第十三篇-管道和重定向).md#总结)
+### [参考](13_Zsh-开发指南(第十三篇-管道和重定向).md#参考)
+### [更新历史](13_Zsh-开发指南(第十三篇-管道和重定向).md#更新历史)
+## [第十四篇 文件读写](14_Zsh-开发指南(第十四篇-文件读写).md)
+### [导读](14_Zsh-开发指南(第十四篇-文件读写).md#导读)
+### [写文件](14_Zsh-开发指南(第十四篇-文件读写).md#写文件)
+-  [创建文件](14_Zsh-开发指南(第十四篇-文件读写).md#创建文件)
+-  [清空文件](14_Zsh-开发指南(第十四篇-文件读写).md#清空文件)
+-  [删除文件](14_Zsh-开发指南(第十四篇-文件读写).md#删除文件)
+-  [多行文本写入](14_Zsh-开发指南(第十四篇-文件读写).md#多行文本写入)
+-  [用 mapfile 读写文件](14_Zsh-开发指南(第十四篇-文件读写).md#用-mapfile-读写文件)
+-  [从文件中间位置写入](14_Zsh-开发指南(第十四篇-文件读写).md#从文件中间位置写入)
+### [读文件](14_Zsh-开发指南(第十四篇-文件读写).md#读文件)
+-  [读取整个文件](14_Zsh-开发指南(第十四篇-文件读写).md#读取整个文件)
+-  [按行遍历文件](14_Zsh-开发指南(第十四篇-文件读写).md#按行遍历文件)
+-  [读取指定行](14_Zsh-开发指南(第十四篇-文件读写).md#读取指定行)
+-  [读取文件到数组](14_Zsh-开发指南(第十四篇-文件读写).md#读取文件到数组)
+-  [读取指定数量的字符](14_Zsh-开发指南(第十四篇-文件读写).md#读取指定数量的字符)
+-  [向文件中间插入内容](14_Zsh-开发指南(第十四篇-文件读写).md#向文件中间插入内容)
+### [总结](14_Zsh-开发指南(第十四篇-文件读写).md#总结)
+## [第十五篇 进程与作业控制](15_Zsh-开发指南(第十五篇-进程与作业控制).md)
+### [导读](15_Zsh-开发指南(第十五篇-进程与作业控制).md#导读)
+### [在子进程中执行代码](15_Zsh-开发指南(第十五篇-进程与作业控制).md#在子进程中执行代码)
+### [在后台运行进程](15_Zsh-开发指南(第十五篇-进程与作业控制).md#在后台运行进程)
+### [在脚本中使用后台进程执行代码](15_Zsh-开发指南(第十五篇-进程与作业控制).md#在脚本中使用后台进程执行代码)
+### [信号](15_Zsh-开发指南(第十五篇-进程与作业控制).md#信号)
+### [总结](15_Zsh-开发指南(第十五篇-进程与作业控制).md#总结)
+## [第十六篇 alias 和 eval 的用法](16_Zsh-开发指南(第十六篇-alias-和-eval-的用法).md)
+### [导读](16_Zsh-开发指南(第十六篇-alias-和-eval-的用法).md#导读)
+### [alias](16_Zsh-开发指南(第十六篇-alias-和-eval-的用法).md#alias)
+### [eval](16_Zsh-开发指南(第十六篇-alias-和-eval-的用法).md#eval)
+### [总结](16_Zsh-开发指南(第十六篇-alias-和-eval-的用法).md#总结)
+## [第十七篇 使用 socket 文件和 TCP 实现进程间通信](17_Zsh-开发指南(第十七篇-使用-socket-文件和-TCP-实现进程间通信).md)
+### [导读](17_Zsh-开发指南(第十七篇-使用-socket-文件和-TCP-实现进程间通信).md#导读)
+### [Socket 文件](17_Zsh-开发指南(第十七篇-使用-socket-文件和-TCP-实现进程间通信).md#Socket-文件)
+### [TCP](17_Zsh-开发指南(第十七篇-使用-socket-文件和-TCP-实现进程间通信).md#TCP)
+### [程序样例](17_Zsh-开发指南(第十七篇-使用-socket-文件和-TCP-实现进程间通信).md#程序样例)
+### [总结](17_Zsh-开发指南(第十七篇-使用-socket-文件和-TCP-实现进程间通信).md#总结)
+## [第十八篇 更多内置模块的用法](18_Zsh-开发指南(第十八篇-更多内置模块的用法).md)
+### [导读](18_Zsh-开发指南(第十八篇-更多内置模块的用法).md#导读)
+### [模块的使用方法](18_Zsh-开发指南(第十八篇-更多内置模块的用法).md#模块的使用方法)
+### [日期时间相关模块](18_Zsh-开发指南(第十八篇-更多内置模块的用法).md#日期时间相关模块)
+### [读写 gdbm 数据库](18_Zsh-开发指南(第十八篇-更多内置模块的用法).md#读写-gdbm-数据库)
+### [调度命令](18_Zsh-开发指南(第十八篇-更多内置模块的用法).md#调度命令)
+### [底层的文件读写命令](18_Zsh-开发指南(第十八篇-更多内置模块的用法).md#底层的文件读写命令)
+### [其他模块](18_Zsh-开发指南(第十八篇-更多内置模块的用法).md#其他模块)
+### [自己编写模块](18_Zsh-开发指南(第十八篇-更多内置模块的用法).md#自己编写模块)
+### [总结](18_Zsh-开发指南(第十八篇-更多内置模块的用法).md#总结)
+## [第十九篇 脚本实例讲解](19_Zsh-开发指南(第十九篇-脚本实例讲解).md)
+### [导读](19_Zsh-开发指南(第十九篇-脚本实例讲解).md#导读)
+### [实例一:复制一个目录的目录结构](19_Zsh-开发指南(第十九篇-脚本实例讲解).md#实例一:复制一个目录的目录结构)
+### [实例二:寻找不配对的文件](19_Zsh-开发指南(第十九篇-脚本实例讲解).md#实例二:寻找不配对的文件)
+### [实例三:用 sed 批量重命名文件](19_Zsh-开发指南(第十九篇-脚本实例讲解).md#实例三:用-sed-批量重命名文件)
+### [实例四:根据文件的 md5 删除重复文件](19_Zsh-开发指南(第十九篇-脚本实例讲解).md#实例四:根据文件的-md5-删除重复文件)
+### [实例五:转换 100 以内的汉字数字为阿拉伯数字](19_Zsh-开发指南(第十九篇-脚本实例讲解).md#实例五:转换-100-以内的汉字数字为阿拉伯数字)
+### [实例六:为带中文汉字数字的文件名重命名成以对应数字开头](19_Zsh-开发指南(第十九篇-脚本实例讲解).md#实例六:为带中文汉字数字的文件名重命名成以对应数字开头)
+### [总结](19_Zsh-开发指南(第十九篇-脚本实例讲解).md#总结)

+ 15 - 0
maketoc

@@ -0,0 +1,15 @@
+#!/bin/zsh
+
+echo "# Zsh 开发指南 目录"
+
+for filename (*Zsh-开发指南(第*md) {
+    local title=${${${filename#*(}%)*}//-/ }
+    echo "## [$title]("$filename")"
+
+    for i (${(f)"$(grep "^###" $filename)"}) {
+        local level=${i%% *}
+        local subtitle=${i#$level }
+        [[ $level == "####" ]] && level="- "
+        echo "$level [$subtitle]("$filename"#${subtitle// /-})"
+    }
+}