Linux 空环境变量名

Linux 空环境变量名,linux,bash,ubuntu,terminal,ltrace,Linux,Bash,Ubuntu,Terminal,Ltrace,我正在用以下工具调试Ubuntu 20.04中的一个应用程序: ltrace -e getenv ./cmd 我想知道涉及哪些环境变量及其各自的值。当我意识到有一个没有值的“空名称变量”时,我感到惊讶。存在ltrace输出: .... linux_a64.installos->getenv("") = nil linux_a64.installos->getenv("TMPDIR") = &qu

我正在用以下工具调试Ubuntu 20.04中的一个应用程序:

ltrace -e getenv ./cmd
我想知道涉及哪些环境变量及其各自的值。当我意识到有一个没有值的“空名称变量”时,我感到惊讶。存在ltrace输出:

....
    linux_a64.installos->getenv("")            = nil
    linux_a64.installos->getenv("TMPDIR")      = "/tmp"
    linux_a64.installos->getenv("DEBUGCMD")    = nil
....

有人知道这可能是什么吗?有一种方法可以为环境变量指定空值?

可能尚未设置此环境变量

$ env | grep POTATO

$ echo $POTATO

您可以获取环境变量值,即使之前没有设置。

我想OP是在询问第一行,其中名称似乎是空字符串。什么是
cmd
?不清楚为什么它会调用
getenv
,并使用空字符串作为参数,但显然它实际上并不非法。我不知道对环境的任何解释允许以
=
开头的字符串作为环境的一部分。它可能只是对初始化为空字符串的值进行操作的一些逻辑。与避免不必要的库调用相比,程序员通常更喜欢较少的特殊情况。为什么不附加一个调试器并查看调用的位置?
cmd
是一个
setup
二进制文件。显然,它只通过一个简单的命令行调用安装GUI文件:
“/media/virtuallcd/installationGUI”“-CDpath”“/media/virtuallcd/files/”
问题是,当我直接在终端中键入此命令行时,它可以工作。但是当这一行被
setup
调用时,出现了一个错误:
错误:不能等待进程“/media/virtuallcd/installationGUI”“-CDpath”“/media/virtuallcd/files/”
这在较旧的Ubuntu和Debian版本中对我来说非常有效,并且没有这个“空变量名”。这个问题出现在Ubuntu20.04中。虽然我认为env name可以是任何字符串,但我不会由此推断系统中存在空的环境变量。从跟踪中,我得出的结论是,
cmd
正在以空字符串作为参数发出一个
getenv
调用,并接收
nil
作为答案,因为此时不存在具有此名称的变量。出于同样的原因,我会得出结论,
DEBUGCMD
在执行点不存在。顺便说一句,要查看所有环境变量,我认为
printenv
将是首选工具。