2017-04-16 69 views
0

我想传递字符串路径到我定义并遇到问题的matlab函数。这里是我尝试的总结:在Matlab bash中传递路径字符串作为参数

我想传递一个字符串变量(在这种情况下是一个路径)在bash脚本中声明将该变量传递给我自己的函数。例如

var=/usr/local/ 
matlab -nosplash -nodesktop -nojvm -r "my_function($var)" 

我得到了错误:

-bash: syntax error near unexpected token `(' 

为了解决这个问题,我想:

var=/usr/local/ 
matlab -nosplash -nodesktop -nojvm -r "my_function\($var\)" 

这是不是我找到标准的引用我在网上找。无论如何,MATLAB运行,但我得到的错误:

Error: The input character is not valid in MATLAB statements or expressions. 

要查看变量是否正确转换,我试着回声:

var=/usr/local/ 
echo matlab -nosplash -nodesktop -nojvm -r "my_function\($var\)" 

,实现输出是:

matlab -nosplash -nodesktop -nojvm -r "my_function(/usr/local/)" 

由于变量不是字符串,错误是有道理的,我试过了:

var=/usr/local/ 
var=$(printf "'%s'" $var) 
echo matlab -nosplash -nodesktop -nojvm -r "my_function\($var\)" 

表示:

matlab -nosplash -nodesktop -nojvm -r "my_function('/usr/local/')" 

所以,我运行上面的代码,但我仍然会遇到的错误:

Error: The input character is not valid in MATLAB statements or expressions. 

要检查是否在路径上存在的功能,我想这两个PWD和存在()为文件。例如

matlab -nodesktop -nosplash -nojvm -r "exist('my_function.m')" 

在这种情况下,奇怪的是,我并不需要\(\)和返回2,这意味着文件在当前路径存在。

我用尽想法尝试。所以让我知道如何解决这个问题。

+0

这是AA bash的问题不是一个matlab题 – crowdedComputeeer

回答

1

所以我创建了一个函数(myfunc),它将路径作为参数并打印该文件夹(ls)中的文件列表。

$v='~/Documents' 
$v2="myfunc('$v')" 
$echo $v2 
myfunc('~/Documents') 
$matlab -nodisplay -nosplash -r $v2 

它的工作原理。你可以试试这个,分享你的输出吗?

1

我无法重现您的问题;我没有得到你描述的第一个bash错误。肯定有一个问题在$ var周围缺少''。

这对我的作品(理所当然地认为创建my_function是MATLAB路径内)

var=/usr/local/ 
matlab -nosplash -nodesktop -nojvm -r "my_function('$var')" 

或者试试这个没有-r像这样代替:

#!/bin/bash 
var=/usr/local/ 
path_to_my_function=/some/path 

matlab -nosplash -nodesktop -nojvm << EOF 
    addpath('${path_to_my_function}') 
    my_function('${var}') 
EOF 
相关问题