Команда
export FOO
должна, согласно моему пониманию, создать переменную окружения FOO
(с пустым значением), даже если эта переменная ранее не существовала и значение не было предоставлено. Эта позиция, кажется, поддерживается руководством zsh
. См. Следующее из man zshbuiltins
:
export [ name[=value] ... ]
The specified names are marked for automatic export to the environment of subsequently executed commands. Equivalent
to typeset -gx. If a parameter specified does not already exist, it is created in the global scope.
Однако, когда я использую функцию C getenv
, эта переменная среды не регистрируется. Вот простой пример. Рассмотрим следующую программу:
% cat foo.c
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
const char* foo = getenv("FOO");
if ( foo == NULL ) {
printf("The environment variable 'FOO' does not exist!\n");
} else {
printf("%s\n", foo);
return 0;
}
}
Скомпилируйте ее:
% gcc --version
gcc (GCC) 7.2.0
Copyright (C) 2017 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
% gcc foo.c -o foo
Рассмотрите три следующих исполнения:
% ./foo
The environment variable 'FOO' does not exist!
% export FOO
% ./foo
The environment variable 'FOO' does not exist!
% export FOO=BAR
% ./foo
BAR
Что не так в среднем случае? Разве это не должно отображать пустую строку?