Zsh 的强大特性

优质
小牛编辑
143浏览
2023-12-01

重定向功能

示例:

重定向 stdout 和 stderr 到 filecommand |& >file
同时重定向到多个文件command >file.1 >file.2

补全类型控制

compctl -g '*.tar.gz *.gz*.tgz' + -g '*(-/)' tar zxvf 

tar zxvf [tab] , 候选菜单中只出现扩展名为 .tar.gz .gz .tgz 的文件。下面代码供参考,extract [tab]解压缩,补全的类型为压缩包,

compctl -g '*.tar.bz2 *.tar.gz *.bz2 *.gz *.jar *.rar *.tar *.tbz2 *.tgz *.zip *.Z' + -g '*(-/)' extract
extract() {
   if [[ -z "$1" ]] ; thenprint -P "usage: \e[1;36mextract\e[1;0m < filename >"print -P " Extract the file specified based on the extension"
   elif [[ -f $1 ]] ; thencase ${(L)1} in    *.tar.bz2)  tar -jxvf $1    ;;    *.tar.gz)   tar -zxvf $1    ;;    *.bz2)bunzip2 $1 ;;    *.gz) gunzip $1 ;;    *.jar)unzip $1 ;;    *.rar)unrar x $1 ;;    *.tar)tar -xvf $1 ;;    *.tbz2)     tar -jxvf $1    ;;    *.tgz)tar -zxvf $1    ;;    *.zip)unzip $1;;    *.Z)  uncompress $1    ;;    *)echo "Unable to extract '$1' :: Unknown extension"esac
   elseecho "File ('$1') does not exist!"
   fi
}

计算器

zsh 可以当作计算器使用

#载入数学函数模块 可以进行一些比较高级的运算
#(也可以将此句写在配置文件中)
$ zmodload zsh/mathfunc   
#$((数学表达式)) 进行运算,使用 echo 显示结果
$ echo $(( sin(1/4.0)**2 + cos(1/4.0)**2 - 1 ))
  -1.1102230246251565e-16
$ echo $(( pi = 4.0 * atan(1.0) ))
  3.1415926535897931
$ echo $(( f = sin(0.3) ))
  0.29552020666133955
$ print $((1e12 * rand48()))
  847909677310.23413
$ print $(( rand48(seed) ))
  0.01043488334700271    

命令替换

# bash 中使用这种形式
$ emacs `find . -name "*.html"`
# zsh 同样支持,并可以使用以下形式    
$ emacs $(ls **/*.html)
# zsh 还可以将命令结果生成临时文件,并返回文件名    
#支持更复杂的输出和过滤。例如,比较 new/old/ 两个文件夹的内容  
$ diff =(ls new/)  =(ls old/)  
#查看生成的临时文件
ls =()