-1

我在 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 脚本(在 Linux 上)。

4

2 回答 2

1

似乎在 Mac OS X 上运行良好:

if [ ${line[i]} == '{' ];
> then
> echo "tes"
> fi
tes
于 2013-04-09T19:49:15.157 回答
1

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

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

为了实现这一点,您将使用${line:start:length}语法来获取${line}(索引是基于 0 的)的子字符串,例如:

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

您能否评论您现有的代码或添加一些描述您的代码段的伪代码,以便没有 matlab 知识的人知道您到底想要做什么?然后,我们可以帮助您尽可能干净地转换整个内容。

于 2013-04-10T16:45:46.273 回答