如何测试 fish shell 中的 argv 计数和 argv[1] 的值?
How to test for argv count and value of argv[1] in fish shell?
我正在尝试测试 $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
似乎也在评估第二个条件。这是一个错误吗?
问题是 (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
只有在第一个成功时才会执行。
我正在尝试测试 $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
似乎也在评估第二个条件。这是一个错误吗?
问题是 (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
只有在第一个成功时才会执行。