Skip to content

Fish Shell和其他SHELL的差异

抽空看了一下Fish Shell的文档,发现它和其他shell的差别主要是增强或增加了一些方便用户的特性。主要表现在:

1.增强了TAB键自动补齐功能

会根据路径、文件名自动补齐,SHELL变量,常见命令、函数等
还可以使用complete命令为特定命令自定义补齐

2. 增加了自动建议
输入命令时,fish shell会根据$PATH变量的配置,命令行历史以及自动补齐功能提供自动建议(以灰色显示)
可以使用右箭头或ctrl+F接受自动建议

3. 改变了重定向标准错误的方式,使用^而非通用的 ‘2 > $file’:

^ filename  (或 ^^ filename)

4. 自动加载函数的方式

5. 命令行语法高亮显示

当然还有其他的一些不同,目前还没有感觉到方便或者不便:

a. 配置文件的名称和位置:

~/.config/fish/config.fish

或全局配置文件:
/usr/share/fish/config.fish
/etc/fish/config.fish

b. 设置变量的方式:

要设置变量smurf_color 的值为blue, 用:

set smurf_color blue

c. 循环的语法不同

while true
  echo "Loop forever"
end
for file in *.txt
    cp $file $file.bak
end

d. 条件表达式语法不同

if grep fish /etc/shells
    echo Found fish
else if grep bash /etc/shells
    echo Found bash
else
    echo Got nothing
end
switch (uname)
case Linux
    echo Hi Tux!
case Darwin
    echo Hi Hexley!
case FreeBSD NetBSD DragonFly OpenBSD
    echo Hi Beastie!
case '*'
    echo Hi, stranger!
end

e. 提示符的设置使用函数fish_prompt来完成(没有PS1/2变量)

f. 命令行替换使用(),而不是

``或$()

g. 定义与调用函数的语法不同

function say_hello
     echo Hello $argv
  end
> say_hello
Hello
> say_hello everybody!
Hello everybody!

 

其它还有不少。在网上发现了这篇文章,总结的更详细、完整。因此我就不想再重复了:

http://hyperpolyglot.org/unix-shells

 

 

Avatar

专业Linux/Unix/Windows系统管理员,开源技术爱好者。对操作系统底层技术,TCP/IP协议栈以及信息系统安全有强烈兴趣。电脑技术之外,则喜欢书法,古典诗词,数码摄影和背包行。

Sidebar