如何在鱼壳中测试argv计数和argv [1]的值?

时间:2017-09-28 05:44:35

标签: fish

我正在尝试测试$argv的长度或函数中第一个$argv[1]元素的值,如下所示:

function do-something
  if test (count $argv) -lt 2 -o $argv[1] = "--help"
    echo Usage ...
  end
end

但是,我收到以下错误:

⟩ do-something 
test: Missing argument at index 6

问题在于字符串比较,但我不确定如何使其工作。我也试过了-o [ $argv[1] = "--help" ],但这又失败了。

另请注意,如果我包含参数,则此方法有效,因此即使第一个条件失败,fish也会评估第二个条件。这是一个错误吗?

1 个答案:

答案 0 :(得分:4)

问题是(count $argv)$argv[1]都会同时扩展,因为它们都是同一命令的参数,如果未设置,$argv[1]为空。因此,如果没有参数,test会看到:

if test (count) -lt 2 -o = "--help"

导致错误。

解决此问题的最简单方法是引用$argv[1]

if test (count $argv) -lt 2 -o "$argv[1]" = "--help"

引号确保"$argv[1]"扩展为一个参数(空字符串)而不是参数。

另一种方法是使用两个单独的命令:

function do-something
  if test (count $argv) -lt 2; or test $argv[1] = "--help"
    echo Usage
  end
end

第二个test只有在第一个成功时才会执行。