下面是我的脚本片段,它调用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行运行良好,为什么不从变量中取出值?
答案 0 :(得分:2)
...当我在第7行注释时,第8行运行良好,为什么不从变量中取出值?
因为本地环境设置是shell 语法的一部分,并且必须明显存在于命令行中,而不是由变量扩展或命令替换产生。简而言之,
${MY_VERSION} make
没有环境设置;环境设置的语法是NAME=WORD
,该命令中没有=
。
因此shell扩展并进行单词分割${MY_VERSION}
并使用扩展中的第一个单词(VERSION=1.0.0
)作为要运行的命令实用程序的名称。
答案 1 :(得分:1)
选项包括在make
命令
$ 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