区分八度中的空和不存在的环境变量

问题描述

我的意思是在Octave中判断给定的环境变量是否存在。

在大多数情况下有效的方法是size(getenv(varname))(1)。 如果等于1,则该变量存在。 但是,如果它等于0,则该变量可能不存在,或者可能存在并被设置为null值。

如何区分这两种情况? 这可以在八度中“本地”完成吗?

我希望我的脚本能够工作,而与主机操作系统和外壳无关。

在POSIX中,可以发出系统调用并读取结果。 然后,对于Windows,则必须以另一种方式进行检查,并编写一个分别处理这两种情况的包装器。


编辑(tl; dr)

我正在使用已定义/未定义的环境变量,通过组合使用

if(DEFINED ENV{ENV_TEST})
  add_definitions(-DENV_TEST=$ENV{ENV_TEST})
endif()

CMakeLists.txt

#ifdef ENV_TEST
    cout << "ENV_TEST is defined and set to \'" ENV_TEST "\'" << endl;
#else
    cout << "ENV_TEST is not defined" << endl;
#endif
myprog.cc

。 这是我实际情况的MCVE解决方案,其中三种可能的状态(1.未定义,2。定义为null,3。定义且不为null)产生不同的结果。 在我的实际情况下,我只需要区分#1与#2(然后是问题),但是我可以将所有#2案例转换为#3案例,因此Octave现在也知道这一点。 缺点是,它已部署在多台计算机上,因此,我没有像如上所述那样立即编写处理八度的代码,而是考虑了更改处理方式。我不确定这不会有副作用...

解决方法

@ sancho.sReinstateMonicaCellio,如果您没有特定的用例,那么这可能是XY问题(请参阅http://xyproblem.info),或者您是在通过写出一个误导性问题来浪费人们的时间,归结为“ GNU Octave是否应该提供一种方法来确定是否定义了env var?”参见https://octave.org/doc/v4.0.1/Environment-Variables.html

我不敢说为什么GNU Octave开发人员没有提供确定是否定义env var的机制。但我敢打赌,这与该语言的总体设计有很大关系。

您写道:“我希望我的脚本能够工作,而不管主机操作系统和外壳程序如何。”问题是您的问题与主机操作系统和外壳程序无关。问题在于,GNU Octave显然没有提供用于区分env var是未设置还是设置为空字符串的API。这与启动GNU Octave的操作系统或外壳无关。

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...