簡體   English   中英

使用env和在命令前加上變量分配有什么區別?

[英]What's the difference between using env and preceding a command with variable assignments?

當我想更改在bash中執行的命令的環境時,可以在其前面加上變量賦值。 因此,例如,如果我臨時要設置CLICOLOR變量,則可以執行以下操作:

CLICOLOR=1 ls

但我也可以這樣做

env CLICOLOR=1 ls

兩者都得出相同的結果,所以我想知道是否存在差異? 人們為什么要一個使用另一個? 是因為可移植性,還是使用輸出重定向或管道傳輸等時有任何區別?

這主要是因為您不必為了設置變量而運行Shell。 許多工具允許您運行單個命令來執行特定任務(各種工具的cron作業,構建系統,內部腳本或宏語言),並且您希望最大程度地降低此類情況對性能的影響和安全性。

兩者都導致相同的結果,..

不行

..,所以我想知道是否有區別?

是的!

只是一些反復試驗就得出了一些有趣的結果。 我認為這將補充@tripleee的答案

# Where it differs
# PATH=bingo echo "$PATH"
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games
# Here the variable expansion happened before setting the PATH
# env PATH=bingo echo $PATH
env: ‘echo’: No such file or directory
# When an `env` is appended in the beginning, the PATH has changed (even)
# before the the full path of echo is resolved, hence the error

請閱讀以下與[this]答案一致的要點。

  • PATH=bingo echo $PATHPATH=bingo開頭,這是一個賦值
  • env PATH=bingo echo $PATHenv開頭,而不是 賦值

希望這可以幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM