The fish language


The fish language

这份文档用来让你全方位了解fish脚本语言。如果想了解fish交互使用的特性,去看Interactive use。

了解下语法

不只是fish,基本上Shells用起来的方式都是给它们喂commands。你想要执行command,你就先输入一个command名,后边跟上一些arguments。比如说下边这个:

echo hello world

这就是一个echo command。echo是用来把它的arguments输出到屏幕的,所以这里就会打印个hello world到屏幕上。

fish里的所有事情都用commands来做。有些commands用来引用别的commands,有些commands用来声明变量,还有些commands用来把一堆commands组成一个command。其实所有这些comamnds基本语法都差不多。

你要是想更深入的学下echo这个command,你就搁fish输入man echo。所以,你会发现,man这个command就是用来让你查看一个给定主题(这里是echo)的手册(manual)的。你通过arguments告诉这个man你想看什么手册,然后“他”就翻给你看。不只是commands有手册,也会有关于system libraries和其它一些比较重要的文件的手册。

你电脑上的所有的程序都可以当作是fish里的commands来用。如果那个程序刚好在你的PATH里的话,你就直接键入那个程序名就行。要是不在PATH里,你就得说清楚你的程序究竟在哪了。(比如这样 /home/me/code/checkers/checkers 或者这样 ../checkers )。

来看几个比较有用的commands:

  • cd: 切换到别的文件夹
  • ls: 列出文件或者文件夹
  • man: 查看手册
  • mv: 移动(或者重命名)文件
  • cp: 复制文件
  • open: 用默认的应用打开对应的文件
  • less: 查看文件内容

commands和arguments用空白符 分隔。command之间用换行符return或者分号;分隔。所以你也可以在一行里放多个commands,commands之间用分号隔开就行。

switch是非常常见的特殊argument类型。switch基本上总以一个或者好几个的-开头,用来影响commands的作用。比如说吧,ls这个commands会列出当前所在的文件夹下的文件和目录。如果你给它加上-l这个switch(变成了ls -l),它就不只是列出文件名,它还会告诉你文件的大小、权限、所有者还有修改时间之类的。

每个commands都有它自己的switch,都不大一样,你可以问下那个man,看下手册。但也有一些switches基本上每个commands都有,像是--help会给你一些帮助文本,--version会告诉你commands程序的版本号,-i经常就是给你个提示符等着和你交互。

几个术语

来看下这篇文章(以及fish文档里)会涉及到的几个术语:

  • Argument:给command传递的参数
  • Builtin:由shell实现的command。Builtins经常和shell的一些操作紧密的结合,不可能在shell之外实现
  • Command:shell可以运行的程序,或者更严谨的说,shell创建一个新的进程,然后在那个进程里来执行的外置程序
  • Function:用来将一大块的commands视作一个来调用。function让你可以把好几个不一样的简单的commands串在一起组成一个比较高级的command
  • Job:某个运行中的pipeline或者是command
  • Pipeline:一系列commands前后串连在一起,而且前一个command的输出是下一个command的输入
  • Redirection:一种把输出流或者输入流和某个job关联起来的操作
  • Switch 或者 Option:一种特殊的argument,用来改变command的行为。switch基本上总以一个或多个短线-开头。

引起来