我正在尝试测试$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
也会评估第二个条件。这是一个错误吗?
答案 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
只有在第一个成功时才会执行。