2017-04-16 156 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 
相關問題