我在shell脚本中有类似的东西
cd /some/folder1
savedCFLAGS=${CFLAGS-}
export CFLAGS="-fexceptions ${CFLAGS-}"
./configure --some-option -what-ever
make
export CFLAGS=${savedCFLAGS}
cd /some/folder2
./configure --some-option -what-ever
make这或多或少是正确的,但有一个严重的缺陷。
如果CFLAGS以前是未设置的,那么在第一个块之后,它将被设置为空。
有时,这是一个问题,因为一些配置脚本只在变量实际上未设置时才使用默认值--如果变量是空的,则不会使用默认值。
让我还声明,我在脚本中多次使用这样的构造,具有多个不同的变量(这是一个用于构建完整的基于GCC的工具链的脚本)。
将变量恢复到以前的值(如果它实际上是以前设置的话)或未设置的方法(如果它在我修改之前未设置),最简单的方法是什么?
如果savedCFLAGS未被设置,我可以将它设置为特定的令牌,然后测试savedCFLAGS是否有一个与该令牌相等的值。
但是,也许还有更简单的事情?
发布于 2016-10-22 10:00:52
只需使用括号在子subshell中运行setenv+configure+make:
(export CFLAGS="-fexceptions ${CFLAGS-}";./configure --some-option -what-ever; make)它继承了副本中的环境,因此当退出子shell时,您将得到完全相同的“前一”状态: no env。脚本中的变量将被更改,并且进一步的configure命令可以正常工作。
https://stackoverflow.com/questions/40190736
复制相似问题