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基本上总以一个或多个短线
-
开头。