在Matlab bash中传递路径字符串作为参数

时间:2017-04-16 14:59:08

标签: bash matlab matlab-deployment

我想将字符串路径传递给我定义的matlab函数并遇到问题。以下是我尝试过的摘要:

我正在尝试传递一个在bash脚本中声明的字符串变量(在本例中是一个路径),以将该变量传递给我自己的函数。 e.g。

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.

要查看变量是否正确转换,我尝试了echo:

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和exists()for file。 e.g。

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

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

我的想法已经用完了。所以让我知道如何解决这个问题。

2 个答案:

答案 0 :(得分:1)

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

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

有效。你能试试这个并分享你的输出吗?

答案 1 :(得分: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