Answers:
export VARIABLE_NAME='some value'
是设置环境变量在任何符合POSIX标准壳(方式sh
,dash
,bash
,ksh
,等;也ZSH)。如果变量已经具有值,则可以使用export VARIABLE_NAME
它来使其成为环境变量而无需更改其值。
POSIX之前的Bourne外壳不支持此功能,这就是为什么您会看到避免export VARIABLE_NAME='some value'
使用VARIABLE_NAME='some value'; export VARIABLE_NAME
而代之以脚本的原因。但是,如今POSIX之前的Bourne外壳极为罕见。
setenv VARIABLE_NAME='some value'
是用于设置环境变量的csh语法。setenv
在sh中不存在,并且csh在脚本中极少使用,并且在过去20年中已被bash超越以进行交互使用(甚至zsh甚至更长),因此除非遇到它,否则您可以将其忘记。
env
除了在shebang行中,该命令很少有用。在不带参数的情况下调用它时,它显示的是环境,但export
效果更好(已排序,并且经常用引号将值中的换行与分隔值的换行消除歧义)。当参数调用,它运行额外的环境变量的命令,但没有相同的命令env
也可以(VAR=value mycommand
运行mycommand
与VAR
设置为value
,就像env VAR=value mycommand
)。env
在shebang行中有用的原因是它执行PATH
查找,并且在使用命令名称调用时恰好不执行其他任何操作。该env
命令对于仅使用几个环境变量运行命令很有用-i
,或不带参数来显示环境,包括带有不会导入的无效名称的变量。
将变量设置为VAR='asdf'
离开环境不变,这意味着您在同一会话中启动的程序将一无所知,VAR
并且将无法访问它。在编写shell脚本时,您需要这种行为。
export
另一方面,它是一个内置的bash,可修改环境,从而使导出的变量对于当前会话中产生的子进程可见。您可以通过运行来实现相同的目的VAR='asdf' %program_name%
。
env
不是内置函数,而是程序本身。从表面上看,它的工作方式与您时完全相同VAR='asdf' %program_name%
,但是在较低级别,事情会变得有些复杂。首先,env
启动。它修改环境,然后使用给定的参数执行命令。通过使用exec(3)系统调用,您可以在自己的代码中实现相同的行为。
setenv
export
如您的回答所述,它仅位于csh-family shell中。
有几个问题的答案可以回答这个问题:
(等等。)
VAR=asdf
如果环境VAR
中已经存在,则不会更新环境。(在原始的Bourne炮弹中并非如此。)