function - fish shell : Check if argument is provided for function

标签 function shell fish

我正在创建一个函数(如下),您可以使用它提供一个参数、一个目录。我测试是否 $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/

相关文章:

vba - 如果二维数组中的值存在于另一个二维数组中

javascript - 没有大括号的 JavaScript 中的 Lambda 函数语法

linux - Shell - 抑制单个命令的输出

git - fish shell -eq 和 -a 在 if 语句中

shell - fish shell : filter $argv (lightweight/dynamic argparse)

c++ - 将数组传递给函数 C++

javascript - Apple 或 Shellscript |获取属性。图像的类名的 "src"并下载它

linux - 尝试在 bash shell 环境中从下载的 html 页面中获取 'grep' 链接,而无需 cut、sed、tr 命令(仅 e/grep)

linux - 使用函数路径中较早的函数

flutter - flutter 中 function() 和 ()=> function() 有什么区别?