繁体   English   中英

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

[英]fish shell -eq and -a in if statement

我正在阅读鱼壳的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

我知道cmd被设置为commandline -opc 但是在下一个语句中(count $cmd) -eq 1 -a $cmd[1] = 'git' ,- -eq-a是什么意思?

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

谢谢。

实际上-eq-a不是鱼语法的一部分。 他们是普通的论点!

if [ (count $cmd) -eq 1 -a $cmd[1] = 'git' ]

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

if test (count $cmd) -eq 1 -a $cmd[1] = 'git'

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

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

-eq整数比较函数

-a合乎逻辑的

所以逻辑等价物将是这样的:

if [ (count $cmd) == 1 && $cmd[1] == 'git' ]

(在Java伪语法中)。

背景

使用-eq的原因是因为shell通常仅用于文本处理。 结果数字存储在“字符串”中。 有时两个数字是等价的,但不是字符串等价的。 例如以下示例:

if [ "01" -eq "1" ]
then
    echo "integer equal"
fi
if [ "01" = "1" ]
then
    echo "string equal"
fi

只打印integer equal

来自Fish文档

  • 如果NUM1和NUM2在数值上相等,则NUM1 -eq NUM2返回true。
  • 如果COND1和COND2都为真,则COND1 -a COND2返回true。

它测试(count $cmd) = 1$cmd[1] = 'git'
=这里是平等,而不是任务)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM