导读

习惯写 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*becho "a*b"Zsh 默认配置中,通配符如果匹配不到文件会报错
if true; then :; fiif true {}Zsh 中不需要使用 : 作为空语句
[ "$var" == value ][[ $var == value ]]Zsh 中的 [ ] 里不支持 ==,一律用 [[ ]]
ls \| tee file \| lessls > file \| lessZsh 中不需要用 tee 即可实现相同功能

总结

本文简单列出了一些 zsh 中已经不再需要的 bash 用法,以及 zsh 和 bash 行为不一致的用法。待补充。