Невероятная возможность
Не должно быть никаких проблем, но, возможно, вы используете нечасто используемую функцию оболочки.
Если вы используете set -k
в работающей оболочке,или используйте sh -k
для запуска оболочки, она будет рассматривать все, что выглядит как переменная среды, как переменную среды.
Вы, вероятно, уже знаете, что оболочки, отличные от семейства оболочек C, могут устанавливать переменную среды дляодиночная команда, добавляя ее перед командой:
PATH="/somewhere/else:$PATH" cmdname -opts file1 file2
Команда сама видит измененную среду;поиск в оболочке cmdname
не изменяется.Однако при действующем set -k
все, что выглядит как переменная среды, обрабатывается как единое целое:
cmdname -opts PATH="/somewhere/else:$PATH" file1 file2
Вы можете проверить это, используя, например, env
, в качестве команды.Существуют веские причины (например, команда dd
), чтобы не делать это поведением по умолчанию.
Против гипотезы
Против этой гипотезы я не знаю оболочки, которая возражаетдо «=
» в значении окружающей среды.Было бы неприятно, если бы было такое ограничение.
Обычный GNU Make в порядке
Однако я могу сделать:
make CFLAGS='-Dxyz=pqr' progname
и, сset -k
в действительности, я также могу сделать:
make -e CFLAGS='-Dxyz=pqr' progname
В обоих случаях компиляция принимает значение, указанное в командной строке, как переопределение того, что установлено в make-файле.
одинарные кавычки не видны make
;они удаляются оболочкой, конечно.Вы можете прекрасно их опустить, и я получу тот же результат.Я использую bash
в MacOS X, но я ожидаю, что такие же результаты будут получены в любой Unix-подобной системе, использующей любую из стандартных оболочек POSIX-иша (Bourne, Korn, Bash).