我想将字符串路径传递给我定义的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,意味着文件存在于当前路径中。
我的想法已经用完了。所以让我知道如何解决这个问题。
答案 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