习惯写 bash 的开发者容易将 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 行为不一致的用法。待补充。