从Matlab查询的Shell变量名具有附加字符

从Matlab查询的Shell变量名具有附加字符,matlab,unix,Matlab,Unix,我正在使用以下脚本run_test: #!/bin/sh temp=$1; cat <<EOF | matlab [status name] = unix('echo $temp'); disp(name); % some Matlab code test_complete = 1; save(name) exit EOF #/垃圾箱/垃圾箱 温度=$1; cat>>>>>>>运行1 >> >> >> >> >> [energon2]~$ls*.mat run1?.ma

我正在使用以下脚本run_test:

#!/bin/sh

temp=$1;
cat <<EOF | matlab

[status name] = unix('echo $temp');
disp(name);

% some Matlab code

test_complete = 1;
save(name)

exit
EOF
#/垃圾箱/垃圾箱
温度=$1;
cat>>>>>>>运行1
>> >> >> >> >> 
[energon2]~$ls*.mat
run1?.mat
保存文件时,文件名末尾有一个“?”,但在命令行上显示时没有。这对我的需求来说是可以接受的,但是不知道为什么会发生这种情况有点恼人。如有任何解释,将不胜感激

编辑、解决方案: Yuk在下面的根本原因和save(“$temp”)的使用中是正确的。我现在使用以下脚本

#!/bin/sh

temp=$1;
cat <<EOF | matlab

% some Matlab code

test_complete = 1;
save('$temp')

exit
EOF
#/垃圾箱/垃圾箱
温度=$1;

cat您的
name
变量的最后一个字符是行尾。在unix中运行
echo run1
时,此命令显示
run1
,然后单击“回车”。在脚本中,echo的所有输出都保存到
name变量中

您可以通过以下方式进行确认:

>> format compact
>> [status, name] = unix('echo run1')
status =
     0
name =
run1

>> numel(name)
ans =
     5
>> int8(name(end))
ans =
   10
>> int8(sprintf('\n'))
ans =
   10
显然,这个字符可以是unix中文件名的一部分,但shell将其显示为

你不能改为
保存($temp)


编辑:请参阅下面我的评论以获得更正和更多解释。

getenv('temp')
给了您什么相同的结果?getenv('temp')返回一个空字符串。save($temp)抛出错误并坚持save必须接收字符串。
save$temp('temp')
save('temp')
两者都可以工作。我不知道Matlab可以直接访问shell变量。谢谢。在您的情况下,MATLAB不访问shell变量。在将命令传递给MATLAB之前,shell用它的值替换
$temp
。您使用的不是MATLAB脚本,而是shell脚本。因此,即使在
[status name]=unix('echo$temp')MATLAB将其视为
[status name]=unix('echo run1')。另一方面,
getenv('temp')
只在脚本中定义,而不在主环境中定义,这就是为什么
getenv('temp')
不返回任何内容的原因。
>> format compact
>> [status, name] = unix('echo run1')
status =
     0
name =
run1

>> numel(name)
ans =
     5
>> int8(name(end))
ans =
   10
>> int8(sprintf('\n'))
ans =
   10