Linux

env 命令如何真正起作用

  • November 21, 2019

我是使用環境變數的新手,我正在測試如何將環境變數傳遞和覆蓋到我的腳本中。

為了測試它的行為,我創建了一個簡單的腳本,命名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 與新環境一起執行時,變數擴展會延遲。

引用自:https://unix.stackexchange.com/questions/553384