从 powershell/batch 向八度脚本传递和读取自定义参数

Pass and read custom argument to an octave script from powershell/batch

我想知道在一般情况下从 Powershell/batch 执行八度脚本时是否可以直接传递自定义参数。让我们举个例子:

$octaveExePath = "C:\Octave\Octave-7.1.0\mingw64\bin\octave-cli.exe"

# Executing the script
& $octaveExePath test.m "some_custom_string"

有没有办法从 test.m 脚本中接收自定义参数?

编辑 1

我已经按照@Ander 的建议做了,但没有成功,我想在这种情况下,matlab 和 octave beaviuor 确实不同。我的结果制作和 example.m 文件

function []=example(arg1)
 disp(arg1)
endfunction

然后从电源调用它shell

& "C:\Octave\Octave-7.1.0\mingw64\bin\octave-cli-7.1.0.exe" example.m asd

Return错误

error: 'arg1' undefined near line 2, column 7
error: called from
    example at line 2 column 2

编辑 2

更具体地说,我的目标是知道是否有一种方法可以将参数从 shell 直接传递给八度程序,而无需使用某些外部文件,例如 this artcile

我已经详细阐述了一个简单的解决方法,可以在 Windows 环境中工作时将变量传递给八度脚本。问题是在 Windows 下无法创建 Octave 可执行程序,如 the documentation.

中所述

无论如何,这个解决方法在某种程度上接近于@Tasos 的建议,对此我深表感谢。

假设我们有一个包含一行代码的 tentative.m 文件:

disp(external_variable)

没有变量声明。

在外部我们只按顺序执行几行 powershell 代码(确保 powershell 的位置与您创建脚本的位置相同):

$octaveExePath = "C:\Octave\Octave-7.1.0\mingw64\bin\octave-7.1.0.exe"
$externalVariable = "just a little try"

& $octaveExePath --eval "external_variable='$($externalVariable)'; tentative" 

此结果与输出:

just a little try

因此,通过这种方式,我已经通过外部执行“绕过”--evalFILE 命令行选项相互排斥的事实,成功地将外部值“传递”给八度脚本(据我所知)。唯一的警告点是,在使用此技术时,非初始化变量(在脚本中)必须与外部评估的变量名称协调(名称必须相同)。

我希望已经清楚了,这可以帮助其他人,请考虑在这种情况下投票。