深入探索Shell的可移植性问题与扩展特性
1. TMOUT变量对select语句的影响
TMOUT(超时)变量会对select语句产生影响。在select循环之前,将TMOUT设置为n秒,如果在这段时间内没有输入,select语句就会退出。
2. 扩展测试工具
ksh引入了由[[和]]界定的扩展测试工具,这是shell关键字,属于shell语法的特殊部分,并非命令。近期版本的bash也采用了这一特殊工具。[[…]]与常规的test和[…]命令不同,它不会进行单词扩展和模式扩展(通配符匹配),这意味着引号的使用需求大大降低。实际上,[[…]]内的内容形成了一种独立的子语言,使用起来更加便捷。其大多数操作符与test相同,完整列表如下:
| 操作符 | bash/ksh专属 | 为真的条件 |
| — | — | — |
| -a file | | 文件存在(已过时,建议使用 -e) |
| -b file | | 文件是块设备文件 |
| -c file | | 文件是字符设备文件 |
| -C file | ksh | 文件是连续文件(大多数Unix版本不支持) |
| -d file | | 文件是目录 |
| -e file | | 文件存在 |
| -f file | | 文件是普通文件 |
| -g file | | 文件设