后来过了很长一段时间才搞定~真是要多上网,多读书,少吃零食,多抽烟啊~~

linux系统是由C系语言写的,其中判断一个字符串是否结束,是看是否以\0结尾(null字符),
而系统对一些字符流也是这样处理的,如进程中的环境变量:
代码: 全选
cat /proc/${pid}/environ
代码: 全选
UPSTART_INSTANCE=LANGUAGE=zh_CN:zhUPSTART_JOB=mountallTERM=linuxLANG=zh_CN.UTF-8UPSTART_EVENTS=startupPWD=/
后来才知道,换行符\n属于可输入字符,也是允许存在于字符串中的。
也就是说字符串以\0分隔是最保险的。
代码: 全选
cat -A /proc/${pid}/environ
代码: 全选
UPSTART_INSTANCE=^@LANGUAGE=zh_CN:zh^@UPSTART_JOB=mountall^@TERM=linux^@LANG=zh_CN.UTF-8^@UPSTART_EVENTS=startup^@PWD=/^@
find命令默认的行为是-print,默认以\n分隔,而-print0选项,则将输出以\0分隔,
然后传给xargs -0,即可解析\0分隔的字符串(很强大的组合)。
sort -z,uniq -z也可解析。
另外,也可以使用tr,将\0处理成我们想要的分隔符:
代码: 全选
tr "\0" "'"
而且配合grep等可模拟ls大部分功能(如果你不嫌手指累的话~,不过在脚本中使用会变得很安全),
我记得有本书上说find枚举30万个文件只需要0.4秒,而ls要4秒~还没echo *的速度快(ls还没bash解析得快吗?

当大家对一些文件名的特殊符号无从下手时,不妨试试用find等命令哦。
