2013-04-09 122 views
-1

我已在MATLAB中的以下内容:的Bash脚本 - > While循环,For循环,如果声明(从MATLAB转换)

while ~feof(fi) 
     dline== fgetl(fi) 
     if count == 0 
      if dline == -1 
       <do stuff> 
      end 
     end 
     if dline(end-27) == ':' 
      dline = dline(1:end-28) 
     end 
     <output> 
     for i = 32:size(dline,2) 
      if dline(i) == '{' 
       count = count + 1 
       sp = [] 
       for j = 1:count 
        sp = [sp;s] 
       end 
       <output> 
      elseif dline(i) == '}' 
       count = count - 1 
       sp = [] 
       for j = 1:count 
        sp = [sp;s] 
       end 
       <output> 
      elseif dline(i) == ',' 
       <output> 
      else 
       <output> 
     end 
    end 

我有我的鼎联的索引麻烦。例如在MATLAB:

if dline(i) == '{' 

翻译到外壳脚本,我有:

if [ ${line[i]} == '{' ] 

或一些变体。但是我收到了与此相关的错误,或者找不到'{'。我试图用'$ x'替换'i',其中'x'从循环内的32开始计数。我尝试用“$ match1”取代'{',其中'$ match1'='{'。

请忽略MATLAB代码中的任何问题,我知道这很有效,而且我只是很快输入了它。我更感兴趣的是将该代码转换为可用的BASH脚本(在Linux上)。

+0

那么,你真正的问题是什么......? – 2013-04-09 19:48:03

+1

在你想测试的变量周围加上双引号,并删除其中一个'=' – michaelmeyer 2013-04-09 19:52:17

回答

1

似乎是工作完美的罚款在Mac OS X:

if [ ${line[i]} == '{' ]; 
> then 
> echo "tes" 
> fi 
tes 
+0

我有:'我在32:$ {#line}'和'if [“$ {line [i]} =='{'];',但这似乎并没有工作。我得到一个“我”(语法错误表达式)的错误,如果我使用“$ x”代替我的if声明,我不会进入if语句。 – user1187621 2013-04-10 11:51:34

1

如果我张贴的代码和你在做什么的理解是正确的,你是在错误的轨道上。

${foo[$x]}的构建体,foo是一个数组,并且您在位置${x}索引的元素,但可以不把在外壳脚本中的字符串作为在这样的特定位置的阵列和索引在该字符串的字符。

为了实现这一目标,你将使用${line:start:length}语法获取的${line}子串(该指数是从0开始),例如:

$ foo="abc" 
$ echo "${foo:0:1}" 
a 
$ echo "${foo:1:2}" 
bc 

你能评论您的现有代码或添加一些伪代码来描述你的片段让没有matlab知识的人知道你正准备做什么?然后,我们可以帮助您尽可能干净地转换整个事情。