分类 Linux 相关 下的文章

linux 命令行中的 - 和 --

我们经常见到类似下面的:

 ls -a        #short option
 ls --all     #long  option

有些程序使用short options, 有些使用long options, 有些既有short, 又有long.
据说一开始都是使用short options, 后来有些程序的选项特别多,以至于short options 都不够了, 或者有些options的首字母是一样的, 就产生了long options.
一般来说short options用来日常的敲命令, long options 一般使用在脚本里面, 可读性更好.

但是, 有时候, 你可能也会看到下面的这2种:

 tar -cvf - .
 ls -- $FILE_NAME  #before:  export FILE_NAME='--version'

第一个tar 命令看似不好理解, 让我们先看一个正常的:
tar -cvf a.tar file1 file2 #archive file1, file2 成a.tar
对比上面的命令, "-" 相当于 a.tar, 后面的 "." 相当于要archive的文件.
在一些命令行命令中, "-" 用来指代 stdin, 或者stdout.
所以上面的命令意思是: 把当前路径下的文件archive的包输出到stdout. (当然你可以用管道接着处理).
但是注意, 这个不是bash规定的, 而是应用程序自己设置的.

第二个ls命令中间有2个横线 -- (两边都有空格).
英文称: double dash, bare double dash, double hyphen.
这个ls命令的意思是: 列出文件 "--version"的信息, 这里有个文件名字偏偏叫做: "--version".
或者你使用git的时候, 会遇到 git diff origin master -- path/to/file
为什么这里会有2个横线呢? 其实这2个横线是告诉命令行, 后面的字符不是命令行选项, 可以作为一般的字符理解
如果不用 "--":

  • ls 那个命令将变为 ls --vesion, 只能打印ls的版本信息, 不能显示文件 "--version"的信息.
  • git diff 命令可能会遇到 git diff origin master master (后一个master是一个文件名).