if语句中的fish shell -eq和-a

Has*_*try 2 git shell tab-completion fish completion

我正在阅读鱼壳的git.fish完成脚本(/usr/local/Cellar/fish/2.1.2/share/fish/completions),我在理解语法的含义时遇到了一些问题.

在街区,

function __fish_git_needs_command
  set cmd (commandline -opc)
  if [ (count $cmd) -eq 1 -a $cmd[1] = 'git' ]
    return 0
  end
  return 1
end
Run Code Online (Sandbox Code Playgroud)

我明白这cmd是设置为commandline -opc.但在下一个声明中(count $cmd) -eq 1 -a $cmd[1] = 'git',做什么-eq-a意味着什么?

我是fish shell的新手,我试图通过尝试为程序编写自己的完成脚本来理解语法.非常感谢帮助.

谢谢.

rid*_*ish 6

其实-eq-a没有鱼语法的一部分.他们是普通的论点!

if [ (count $cmd) -eq 1 -a $cmd[1] = 'git' ]
Run Code Online (Sandbox Code Playgroud)

这里的开口方括号实际上是一个命令,如cat或grep.你确实有一个文件/bin/[.通过test命令可能更容易理解,这是同样的事情:

if test (count $cmd) -eq 1 -a $cmd[1] = 'git'
Run Code Online (Sandbox Code Playgroud)

现在很容易看出,-eq并且-a只是传递给普通的参数test,对鱼没有语法意义.

test有自己的小语言,如awk或sed.请参阅man test了解它.