Bash脚本 - >循环,For循环,If语句(从MATLAB转换)

时间:2013-04-09 19:44:04

标签: bash matlab shell

我在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

我的dline编制索引有问题。例如在MATLAB中:

    if dline(i) == '{'

转换为shell脚本,我有:

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

或其某些变体。但是我得到了与之相关的错误,或者没有找到'{'。我试过用'$ x'替换'i',其中'x'从循环内的32开始计数。我尝试将'{'替换为“$ match1”,其中'$ match1'='{'。

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

2 个答案:

答案 0 :(得分:1)

似乎在Mac OS X上完美运行:

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

答案 1 :(得分:1)

如果我对发布的代码以及您正在做的事情的理解是正确的,那么您走错了路。

${foo[$x]}的构造中,foo是一个数组,您要在位置${x}索引元素,但是您不能将shell脚本中的字符串视为数组和索引这个字符串中的一个字符就像这样的特定位置。

要实现这一点,您将使用${line:start:length}语法来获取${line}的子字符串(索引从0开始),例如:

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

您是否可以评论现有代码或添加一些描述您的代码段的伪代码,以便没有matlab知识的人知道您正在尝试做什么?然后我们可以帮助您尽可能干净地转换整个事物。

相关问题