当我想要改变我在bash中执行的命令的环境时,我可以在它之前添加一个变量赋值。例如,如果我暂时想要设置CLICOLOR
变量,我可以这样做:
CLICOLOR=1 ls
但我也可以这样做
env CLICOLOR=1 ls
两者都会产生相同的结果,所以我想知道是否有任何区别?为什么人们使用一个而不是另一个?是因为可移植性,还是在使用输出重定向或管道等时有什么不同?
答案 0 :(得分:4)
这主要是因为您不必仅仅为了设置变量而运行shell。许多工具允许您运行单个命令来执行特定任务(cron作业,构建系统,内部脚本或各种工具的宏语言),并且您希望最大限度地降低此类方案的性能影响和安全性。
答案 1 :(得分:0)
两者都会产生相同的结果,..
不!
..,所以我想知道是否有任何区别?
是的!
只是一些试验和错误给出了一些有趣的结果。我认为这会补充@ tripleee的answer
# 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 $PATH
以PATH=bingo
开头,作业。env PATH=bingo echo $PATH
以env
开头, 分配。希望这有帮助。