【问题标题】:Bash-style Programming-quote functionality in Matlab?Matlab 中的 Bash 式编程引用功能?
【发布时间】:2013-04-11 18:20:15
【问题描述】:

我会在 Bash 中使用这样的编程引用

$ export b=`ls /`
$ echo $b
Applications Library Network System Users Volumes tmp usr var

现在我想在 Matlab 中找到类似的功能。另外,我想找到一个输出相对路径的命令,而不是像 Matlab 的ls 这样的绝对路径——如果我用正则表达式解析它,我感觉像是在重新发明轮子。我需要找到这个命令来调试命名空间here 的问题。熟悉的 Bash 风格的功能会很酷。

【问题讨论】:

    标签: bash matlab


    【解决方案1】:

    对于您的第一个问题,我认为您可以使用匿名函数获得这种行为:

    b = @() ls('C:\');  %I'm on windows
    b()
    

    表达式b() 现在返回我的 C 盘的内容。

    【讨论】:

    • 匿名函数摇滚!有点像 Python 的列表推导——有人说在 matlab 中没有文件就不能做函数,所以错了 XD 感谢分享+1,好强大的工具!
    • 您好,您知道如何使用匿名功能获取文件吗? a=ls('.');b=@() if isequal(a.isdir,0) a.name end(我知道我在重新发明轮子,但是很好学……)。如果这样的事情能奏效,那就太酷了,a.isdir*a.name——一定有一些非常优雅的方式......
    • 这必须是另一个问题,否则会丢失。
    【解决方案2】:

    bash 反引号的 Matlab 等效项是调用 system() 函数并使用第二个输出参数。它将运行外部命令并捕获输出。

    [status,b] = system('ls /');
    

    如果您要运行并捕获其控制台输出的 Matlab 代码字符串,请使用 evalc

    但要获得文件列表,您需要 Matlab dir 函数。比解析该输出字符串容易得多,并且您可以获得更多信息。请参阅Matlab dir documentationdoc dir 了解更多详情。

    children = dir('/');
    childNames = { children.name };
    childIsDir = [ children.isdir ];
    

    【讨论】:

    • children.name 的一个问题,它还包含目录 -- 一个只获取像 "find . -type d" 这样的文件的标志?
    • dir 输出中还有一个isdir 字段;您可以使用它来过滤目录。
    猜你喜欢
    • 2019-04-16
    • 2011-10-02
    • 1970-01-01
    • 1970-01-01
    • 2010-10-02
    • 1970-01-01
    • 1970-01-01
    • 2012-12-30
    • 1970-01-01
    相关资源
    最近更新 更多