linux的zsh的特性

Zsh的仿真模式:
                        Zsh实现中包含了一个仿真模式(emulation mode),支持对两种主流的Bourne衍生版shell(bash、ksh)和C shell的仿真(csh的支持并不完整)。
                        在Bash的仿真模式下,可以使用与Bash相同的语法和命令集合,从而达到近乎完全兼容的目的。
                        为了激活对Bash的仿真,需要显式执行: emulate bash = emulate sh (为做实验,不确定:错误_zsh_highlight:17: bad set of key/value pairs for associative array 为解决)   。bash 脚本文件可以
                        Zsh是不会根据文件开头的shebang(如#!/bin/sh和#!/bin/bash)自动采取兼容模式来解释脚本的,因此,要让Zsh解释执行一个其他Shell的脚本,你仍然必须手动emulate sh或者emulate ksh,告诉Zsh对何种Shell进行仿真。
                        Zsh在作为/bin/sh存在时,能够自动采取其相应的兼容模式(emulate sh)来执行命令
Zsh内置的echo命令,与我们以前在GNU Bash中常见的echo命令,使用方式是不兼容的。:
                        bash中:
                                     echo \\  与 echo \\\\        echo '\\' 与  echo '\\\\'
                                     输出:\ 与 \\                           \\  与  \\\\
                        zsh中:
                                     echo \\  与 echo \\\\        echo '\\' 与  echo '\\\\'
                                     输出:\与\                              \ 与 \\                              
                            而Bash的echo默认就是不对输出进行转义的,若要得到转义的效果,需显式地指定-e选项。
                          在前一种不加引号(或者加了双引号)的情形下,传递给echo内部命令的字符串将首先被转义,echo \\中的\\被转义成\,echo \\\\中的\\\\被转义成\\。
                          然后,在echo这个内部命令输出到终端的时候,它还要把这个东西再转义一遍,一个单独的\没法转义,所以仍然是作为\输出;连续的\\被转义成\,所以输出就是\。因此,echo \\和echo \\\\的输出相同,都是\。
                          为了让Zsh中echo的输出不被转义,需要显式地指明-E选项
变量的自动分字(word splitting):
                           例:                              text="a b c d \n e"
"                                        bash中 a b c d \n e                          zsh中 a b c d                                   -e 开启输出字串中对反斜杠的转译
                                                                                                             e                                         -E 禁用反斜杠转译"
                                         echo -e $text                                     echo -E $text 
"                                             a b c d                                             a b c d \n e
                                              e 
             bash:
                     Bash会对传递给命令的字符串进行分字(根据空格或换行符),然后作为多个参数传给echo。当然,作为分隔符的换行,在最终输出时就被抹掉了。
                     于是,更好的习惯是把变量名放在双引号中,把它作为一个字符串传递,这样就可以保留文本中的换行符,将其原样输出。
             zsh:
                     在Zsh中,你不需要通过双引号来告诉解释器“$text是一个字符串”。解释器不会把它转换成一个由空格或者\n分隔的参数列表或者别的什么。所以,没有Bash中的trick,直接echo $text就可以保留换行符。
                     但是,如前一节所说,我们需要一个多余的工作来保证输出的是未转义的原始文本,那就是-E选项
1、兼容 bash,原来使用 bash 的兄弟切换过来毫无压力,该咋用咋用。

2、强大的历史纪录功能,输入 grep 然后用上下箭头可以翻阅你执行的所有 grep 命令。

3、智能拼写纠正,输入gtep mactalk * -R,系统会提示:zsh: correct ‘gtep’ to ‘grep’ [nyae]? 

4、各种补全:路径补全、命令补全,命令参数补全,插件内容补全等等。触发补全只需要按一下或两下 tab 键,补全项可以使用 ctrl+n/p/f/b上下左右切换。比如你想杀掉 java 的进程,只需要输入 kill java + tab键,如果只有一个 java 进程,zsh 会自动替换为进程的 pid,如果有多个则会出现选择项供你选择。ssh + 空格 + 两个tab键,zsh会列出所有访问过的主机和用户名进行补全

5、智能跳转,安装了autojump之后,zsh 会自动记录你访问过的目录,通过 j + 目录名 可以直接进行目录跳转,而且目录名支持模糊匹配和自动补全,例如你访问过hadoop-1.0.0目录,输入j hado 即可正确跳转。j –stat 可以看你的历史路径库。

6、目录浏览和跳转:输入 d,即可列出你在这个会话里访问的目录列表,输入列表前的序号,即可直接跳转。

7、在当前目录下输入 .. 或 … ,或直接输入当前目录名都可以跳转,你甚至不再需要输入 cd 命令了。

8、通配符搜索:ls -l **/*.sh,可以递归显示当前目录下的 shell 文件,文件少时可以代替 find,文件太多就歇菜了。"
                         chsh -s /bin/bash 改变当前的shell设置,改变当前设置为 /bin/bash
 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值