【问题标题】:How to set value for bash array using setenv [duplicate]如何使用 setenv 设置 bash 数组的值 [重复]
【发布时间】:2013-10-22 08:49:01
【问题描述】:

我在Linux中编写了一个C程序来使用setenv设置环境变量的值,但是我无法为数组变量设置值(我将数组的值打印到输出文件,但文件的内容是空白),但非数组变量工作正常。 这是代码sn-p:

setenv("header", "Welcome: ", 1);             // work fine, can output to file
setenv("info[0]", "192.168.1.1: ", 1);        // nothing are shown in output file
setenv("info[1]", "AA-AA-AA-BB-BB-BB: ", 1);  // nothing are shown in output file

我找不到它不起作用的任何原因:(感谢任何帮助。

【问题讨论】:

  • @unwind 我认为问题是关于使用 C setenv(),而不是关于 bash
  • @pmod 是的……我对骗子的看法是“数组是 Bash 的一项功能,它们不是环境变量,即使 Bash 也无法导出它们”。

标签: c linux bash


【解决方案1】:

数组由 bash 处理,它们不作为环境变量存在。环境变量以 VARNAME=value 的形式存储在每个进程的内核中,您可以检查一下:

$ cat /proc/$$/environ | tr '\0' '\n'

但是您可以使用带分隔符的字符串形式的数组(逗号或制表符或其他):

info=192.168.1.1:,AA-AA-AA-BB-BB-BB:

并以适当的方式处理此字符串

你也应该小心它的名字。首先有specific requirements关于名称应该如何组成:

Shell 中的实用程序使用的环境变量名称和 IEEE Std 1003.1-2001 的实用程序卷仅由大写字母组成 定义的字符中的字母、数字和“_”(下划线) 在便携式字符集中并且不以数字开头。其他 字符可能被实现所允许;应用程序应 容忍此类名称的存在。

要注意的第二件事是,您冒着修改程序其他组件所依赖的某些变量的风险。

【讨论】:

  • 我现在明白你的意思了。我想我需要另辟蹊径;我的数组相当大,将所有成员存储在带分隔符的字符串中可能不是一个好的解决方案:-)
  • @silent82lion90 那么是临时文件还是轻量级数据库?
  • 这是一个数组,包含当前连接到我服务器的所有用户的 IP 和 MAC,该数组最多可以包含数百个成员(约 500 个)。我认为使用临时文件可能很好,使用 DB 有点矫枉过正。
猜你喜欢
  • 2012-11-02
  • 1970-01-01
  • 2019-12-23
  • 2019-01-18
  • 2018-06-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多