Linux
env 命令如何真正起作用
我是使用環境變數的新手,我正在測試如何將環境變數傳遞和覆蓋到我的腳本中。
為了測試它的行為,我創建了一個簡單的腳本,命名
testenv.sh
如下:#!/bin/bash echo $COLOR
所以,當我跑步時
$ env COLOR=RED ./testenv.sh
我得到了預期的 stdout
RED
。但是我的問題是,為什麼如果我執行以下命令
$ env COLOR=RED echo $COLOR
我沒有得到與上面相同的結果,實際上是一個空白的標準輸出。
$COLOR``env
在呼叫之前由 shell 擴展/bin/echo
。
env
除非您讓呼叫擴展變數的 shell 腳本,否則這是行不通的。甚至:
COLOR=RED echo $COLOR
由於在設置新環境之前擴展了 Shell 變數,因此無法按預期工作。
你需要把它分成兩行:
COLOR=RED echo $COLOR
使其按預期工作。
如果你打電話:
env COLOR=RED sh -c 'echo $COLOR'
它之所以起作用,是因為單引號可防止變數擴展,並且在新 shell 與新環境一起執行時,變數擴展會延遲。