变量替换
变量替换发生在参数之前。
对比下面两条命令:
$ bash -c 'A=10;bash -c "echo $A"'
10
$ bash -c "A=10;bash -c 'echo $A'" # 输出空
$ bash -c "A=10;bash -c \"echo $A\"" # 输出空
$ bash -c "A=10;bash -c \"echo \$A\"" # 会对""内的参数进行替换
10
with-xxx
通常,我们使用with-xxx来临时性改变环境变量,以便在特定环境下执行命令。
比如,系统中go的版本是1.17,但是有个工程需要使用1.12来执行,则脚本with-go1.12
如下:
#!/usr/bin/env bash
mkdir -p ~/gopath1.12
export GOPATH=~/gopath1.12
export GOROOT=~/installed/go1.12
export PATH=$GOROOT/bin:$GOPATH/bin:$PATH
"$@"
执行:
$ with-go1.12 go build main.go
但是,如果带上环境变量就不可以:
$ with-go1.12 A=B go build main.go
./with-go1.12.sh: line 7: A=B: command not found
解决方法:env
#!/usr/bin/env bash
mkdir -p ~/gopath1.12
export GOPATH=~/gopath1.12
export GOROOT=~/installed/go1.12
export PATH=$GOROOT/bin:$GOPATH/bin:$PATH
env -- "$@"