fish

维基百科,自由的百科全书
跳转至: 导航搜索
fish
Fishlogo.png
Friendlyinteractiveshell.png
The friendly interactive shell
原作者 Axel Liljencrantz
開發者 Axel Liljencrantz
穩定版本 2.1.0 / 2013年10月28日;9個月前 (2013-10-28)[1]
操作系统 Unix-like
类型 Unix shell
许可协议 GNU通用公共许可证
網站 http://fishshell.com/

fish是一个Unix shell。 fish这个名字是friendly interactive shell的缩写。 fish专注于交互应用、易用性和友好的用户体验。fish的设计目的是通过容易发现,记住和使用的方式为用户提供一套丰富、强大的功能 。fish于2005年在GNU通用公共许可证条款下正式发布。fish 是一款自由软件

概要[编辑]

fish提供了一个用户友好而又强大的命令行补全英语Command-line completion, 包含有每一个补全项的描述,包含通配符字符串的tab补全,和许多具体命令的补全。它还提供一个广泛的可用的帮助系统。通过一个专门的帮助命令使用用户的网页浏览器来访问所有的fish文档。

语法[编辑]

Fish的语法和别的Shell 脚本英语Shell script略有不同。这些改变是为了让这个语言更加的强大并且更小巧和易学。fish和其他命令行交互语言如bash的一个明显的不同在于:一个变量的内容不需要使用令牌分离,这意味着很少需要使用引号将变量引用括起来。

#变量分派。设置”foo”变量的值为”bar”。
#不要使用=号,因为它是空格符敏感的(使用空格符进行区分)
#并且,set命令可以很容易的进行扩展来与数组,代码块等等一起工作
> set foo bar
> echo $foo
bar
#命令替换,将”pwd”命令的输出值付给变量”wd”。
#不要使用 `` ,因为它们不可嵌套,并且看起来太像' '。
# 不要使用$() ,因为在fish里面$只用于变量扩展(取值)。
> set wd (pwd)
> echo $wd
~
#数组变量。’A’成为一个包含有3, 5, 7, 9, 12这些值的数组
> set A 3 5 7 9 12     
> echo $A[(seq 3)] 
3 5 7
#数组切片(截取)。’B’变成包含’A’的第一和第二个元素的子数组
> set B $A[1 2]          
> echo $B
3 5
#除去’A’的第三和第五个元素
> set -e A[$B]; echo $A  
3 5 9
#for循环,将jpeg转换成png
> for i in *.jpg; convert $i (basename $i .jpg).png; end
# while循环,读取/etc/passwd 中的每一行,并输出以冒号分隔的第五个字段
#(这一字段应该是用户描述)
> cat /etc/passwd|while read line; set arr (echo $line|tr : \n); echo $arr[5]; end


fish与其他的shell之间一个很重要的不同点在于缺乏子的shell。像管道流子程序循环等任务需要通过调用其它语言实现的子shell来完成,子shell是一些为shell脚本运行少量命令然后退出的简单的子程序。不幸的是,在子shell中所做的修改不会对主shell产生任何的影响,这意味着像是变量赋值和很多内部函数的使用并不能像与其一样的工作。Fish从来不去关注这些所谓的子shell;所有的内部函数都充分的发挥作用。

# 这个在其他的很多shells中并不能运行,因为内置的'read'。
# 将会运行在它们自己的子shell。fish 和 zsh 能够如预期的一样运行。
> cat *.txt | read line

有用的错误信息[编辑]

fish中的错误信息被设计来真实地告诉用户什么地方出错了和如何去修正它。

> foo=bar
fish: Unknown command “foo=bar”. Did you mean “set VARIABLE VALUE”? 
For information on setting variable values, see the help section on 
the set command by typing “help set”.

> echo ${foo}bar
fish: Did you mean {$VARIABLE}? The '$' character begins a variable 
name. A bracket, which directly followed a '$', is not allowed as a 
part of a variable name, and variable names may not be zero characters 
long. To learn more about variable expansion in fish, type “help 
expand-variable”.

> echo $(pwd)
fish: Did you mean (COMMAND)? In fish, the '$' character is only used 
for accessing variables. To learn more about command substitution in 
fish, type “help expand-command-substitution”.

通用变量[编辑]

Fish有一个称为通用变量的特性,它允许一个用户永久指定一个值给一个所有用户运行的fish shells中都使用到的变量。这个变量值会被记住,即使是注销或者重新启动,而且会立即更新并传播到所有正在运行的shells。

# 这个会将emacs设置成默认的文本编辑器。'-U' 告诉fish将这个设置为通用变量。
> set -U EDITOR emacs

# 这个命令会将正当运行的所有fish实例的fish提示符的当前工作目录部分变成蓝色。
> set -U fish_color_cwd blue

其它特性[编辑]

參考[编辑]

  1. ^ fishshell.com Fish 1.23.0 brings many new and exciting features to the table.

参看[编辑]

外部链接[编辑]