在调用shell脚本中的make之前无法设置env变量

时间:2015-09-24 21:14:03

标签: linux bash shell makefile

下面是我的脚本片段,它调用make(GNU),尝试在调用make之前设置VERSION env变量

#!/bin/bash
set -e
MY_VERSION="VERSION=1.0.0"

function build_target() {
   echo ${MY_VERSION} make
   ${MY_VERSION} make
   VERSION=1.0.0 make #this works when I comment out above line.
}
build_target

失败并显示错误

VERSION=1.0.0 make ./test.sh: line 7: VERSION=1.0.0: command not found

如代码中所提到的,当我在第7行注释时,第8行运行良好,为什么不从变量中取出值?

3 个答案:

答案 0 :(得分:2)

  

...当我在第7行注释时,第8行运行良好,为什么不从变量中取出值?

因为本地环境设置是shell 语法的一部分,并且必须明显存在于命令行中,而不是由变量扩展或命令替换产生。简而言之,

${MY_VERSION} make

没有环境设置;环境设置的语法是NAME=WORD,该命令中没有=

因此shell扩展并进行单词分割${MY_VERSION}并使用扩展中的第一个单词(VERSION=1.0.0)作为要运行的命令实用程序的名称。

答案 1 :(得分:1)

选项包括在make命令

之后放置env设置
$ cat Makefile 
all:
        echo $(VERSION)
$ cat mm
#!/usr/bin/env bash
set -e
MY_VERSION="VERSION=1.0.0"

function build_target() {
   make ${MY_VERSION}
}
build_target
$ bash mm
echo 1.0.0
1.0.0
$ 

或使用env(1)然后致电make,例如env ${MY_VERSION} make

答案 2 :(得分:1)

另一种选择:

#!/bin/bash
set -e
MY_VERSION="1.0.0"

function build_target() {
   echo VERSION=${MY_VERSION} make
   VERSION=${MY_VERSION} make
}
build_target