22 bash和zsh用法简明对照表

习惯写 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 行为不一致的用法。待补充。