-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) == '{'

シェルスクリプトに翻訳すると、次のようになります。

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

またはそのバリエーション。しかし、それに関連するエラーが発生するか、「{」が見つかりません。「i」を「$x」に置き換えてみました。ここで、「x」はループ内で 32 からカウントアップします。「{」を「$match1」に置き換えてみました。ここで、「$match1」=「{」です。

MATLAB コードの問題は無視してください。動作することはわかっているので、すぐに入力しました。そのコードを (Linux 上で) 使用可能な BASH スクリプトに変換することにもっと興味があります。

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}いますが、シェル スクリプトの文字列を配列として扱い、その文字列内の文字をこのように特定の位置にインデックス付けすることはできません。

これを実現するには、構文を使用して(インデックスは 0 ベースです)${line:start:length}の部分文字列をフェッチします。たとえば、次のようになります。${line}

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

既存のコードにコメントするか、スニペットを説明する疑似コードを追加して、matlab の知識のない人が何をしようとしているのかを正確に理解できるようにすることはできますか? 次に、全体をできるだけきれいに変換するお手伝いをします。

于 2013-04-10T16:45:46.273 に答える