我正在尝试测试如下函数中$argv第一个$argv[1]元素的长度或值:
function do-something
if test (count $argv) -lt 2 -o $argv[1] = "--help"
echo Usage ...
end
end
Run Code Online (Sandbox Code Playgroud)
但是,我收到以下错误:
? do-something
test: Missing argument at index 6
Run Code Online (Sandbox Code Playgroud)
问题在于字符串比较,但是我不确定如何使它起作用。我也尝试过-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"
Run Code Online (Sandbox Code Playgroud)
引号确保"$argv[1]"扩展为一个参数(一个空字符串)而不是没有参数。
一种替代方法是使用两个单独的命令:
function do-something
if test (count $argv) -lt 2; or test $argv[1] = "--help"
echo Usage
end
end
Run Code Online (Sandbox Code Playgroud)
test仅当第一个成功时,第二个才会执行。
| 归档时间: |
|
| 查看次数: |
1471 次 |
| 最近记录: |