我正在创建一个函数(如下),您可以使用它提供一个参数、一个目录。我测试是否 $argv
是一个目录 -d
选项,但这似乎不起作用,即使没有提供参数它也总是返回 true。我也尝试过test -n $argv -a -d $argv
要测试的是 $argv
是空刺,但返回 test: Missing argument at index 1
错误。我应该如何测试函数是否提供了任何参数?为什么是test -d $argv
不起作用,根据我的理解,当没有提供参数时它应该是 false,因为空字符串不是目录。
function fcd
if test -d $argv
open $argv
else
open $PWD
end
end
感谢您的帮助。
最佳答案
count
是执行此操作的正确方法。对于检查是否有任何参数的常见情况,您可以使用其退出状态:
function fcd
if count $argv > /dev/null
open $argv
else
open $PWD
end
end
要回答你的第二个问题,如果 $argv
为空,test -d $argv
返回 true,因为 POSIX 要求当 test
为空时传递一个参数,它必须“如果 $1 不为 null,则退出 true (0);否则,退出 false”。因此,当 $argv 为空时, test -d $argv
意味着 test -d
必须退出 true,因为 -d
不为空!啊!
编辑添加了缺失的end
,感谢 Ismail 的注意到
关于function - fish shell : Check if argument is provided for function,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29635083/