导读
习惯写 bash 的开发者容易将 bash 下的用法用在 zsh 上,虽然多数情况并不会产生错误,但往往会多做很多不必要的工作,让脚本显得更臃肿或难以理解。
Bash 和 zsh 用法简明对照表
Bash 用法 | Zsh 用法 | 说明 |
---|---|---|
"$var" | $var | 避免变量中有空格导致异常 |
"$@" | $* | 避免变量中有空格导致异常 |
"${array[@]}" | $array | 取数组所有元素,@ 可改成 * |
"${#array[@]}" | $#array | 取数组中元素个数,@ 可改成 * |
"${array[n - 1]}" | $array[n] | 取数组第 n 个元素,bash 从 0 开始,zsh 从 1 开始 |
"$array" | $array[1] | Bash 中的 $array 是取数组的第一个元素 |
echo a*b | echo "a*b" | Zsh 默认配置中,通配符如果匹配不到文件会报错 |
if true; then :; fi | if true {} | Zsh 中不需要使用 : 作为空语句 |
[ "$var" == value ] | [[ $var == value ]] | Zsh 中的 [ ] 里不支持 == ,一律用 [[ ]] |
ls \| tee file \| less | ls > file \| less | Zsh 中不需要用 tee 即可实现相同功能 |
总结
本文简单列出了一些 zsh 中已经不再需要的 bash 用法,以及 zsh 和 bash 行为不一致的用法。待补充。