如何让 Octave 更改输入文件中的变量?

How can I get Octave to change the variables in my input files?

我正在尝试让 Octave 更改输入文件中的变量,就像我在 Ubuntu 中使用命令行一样。我已将其剥离回一个简单的案例,我将其更改为字符串 Naer_str 和 '2222' 更改为字符串 sigma_str;将结果打印到一个新文件中。 1111 和 2222 都存在于第一个文件中。下面是我 运行 的全部代码。

 Naer_str= num2str(1000)

 disp(Naer_str)

 sigma_str = num2str(0.491)

 eval(['system(''sed -e "s~1111~${Naer_str}~; s~2222~${sigma_str}~;" OctaveChangeVarTestFile.IN > OctaveChangeVarTestFile_out.IN'');']);

创建了新的输入文件,但没有像我预期的那样看到值 1000 和 0.491,0.491 和 1000 应该是空白的地方。 运行它在调试模式下显示了以下错误消息(自从我几天前开始使用 Octave 以来,我已经看到了很多,但我仍然没有真正理解它的意思)。

 error: invalid use of script in index expression

我试过像这样将内容输入 Linux 终端:

 Naer_str=1000
sigma_Str=0.491
 sed -e "s/1111/${Naer_str}/; s/2222/${sigma_str}/;" OctaveChangeVarTestFile.IN > OctaveChangeVarTestFile_out.IN

这似乎工作正常,所以我假设我一定是在使用 system 或 eval 时犯了语法错误,但我看不到它。

导致此错误消息的原因是什么?为什么我没有看到预期的输出?

我不知道你为什么会收到这个错误,但我 90% 肯定这不会做你想做的事:

eval(['system(''sed -e "s~1111~${Naer_str}~; s~2222~${sigma_str}~;" OctaveChangeVarTestFile.IN > OctaveChangeVarTestFile_out.IN'');']);

在bash中,双引号字符串中的${Naer_str}variable substitution:它将${Naer_str}替换为Naer_str变量的值在字符串中,在将其传递给命令之前。因此,sed 将获得 s/1111/1000/; 作为其命令之一。

但我在 Octave 的 Variables, Manipulating Strings, Strings 或其他地方找不到对此类功能的任何引用。这些字符将被视为文字字符。所以,sed 将得到 s~1000~${Naer_str}~; 作为参数,这意味着它将产生一个垃圾脚本。看起来你在八度音程中做这种事情的方式是使用 printf 风格的格式(如整个操作字符串页面所述)。

  1. 看起来您所拥有的只是一个带有计算命令的 system 调用。您已经可以将计算结果作为 system() 的参数传递,不需要也不应在此处使用 eval()

  2. 八度拼接字符串(字符数组)的方式就是横向矩阵拼接。因此,您可以编写 ['s~1111~' Naer_str] 而不是 's~1111~${Naer_str}~' (正如 abarnert 指出的那样,由没有八度变量概念的 shell 进行插值),八度将连接起来。

  3. 您不需要通过 system() 到达 sed 之外的八度音程来进行文本替换。 strrepregexprep 可以在八度音程(或 Matlab)内对字符数组进行替换。