当谈到改变PATH
环境变量(例如,在“~/.bashrc”中)时,我看到了一些不同的方法:
PATH=$PATH:/new/path
PATH="$PATH:/new/path"
export PATH = $PATH:/new/path
export PATH = ${PATH}:/new/path
setenv PATH $PATH:/new/path
的用途是什么{ }
?什么时候需要" "
?什么时候使用export
或setenv
?顺便说一句,我的 Ubuntu 14.04 没有 的手动条目export
,但有 的setenv
。为什么?
答案1
当谈到改变
PATH
环境变量(例如在“~/.bashrc”)时,我看到了一些不同的方法
其中有些是有效的设置方式$PATH
,但有些是不是有效的设置方式$PATH
;大多数具有相同的结果,但有些的范围有所不同;
说到语法(在 Bash /兼容 shell 中);
PATH=$PATH:/new/path
: 可以,但是您需要转义“/new/path”中的空格(如果有);PATH="$PATH:/new/path"
: 是可以的,并且您不需要转义“/new/path”中的空格(如果有);export PATH = $PATH:/new/path
: 不行,因为赋值运算符之前/之后不能有空格(并且需要在“/new/path”中转义空格);export PATH = ${PATH}:/new/path
: 与...一样export PATH = $PATH:/new/path
;setenv PATH $PATH:/new/path
:setenv
是csh
内置的;它应该与 相同PATH=$PATH:/new/path
;
单引号/双引号均可防止 Bash 因空格而中断;单引号会防止 Bash 执行参数扩展、命令替换或算术扩展,从而强制 Bash 按字面意思解释括起来的字符串;双引号则不会防止 Bash 执行参数扩展、命令替换或算术扩展,而在第二种情况下,需要使用双引号来允许参数扩展$PATH
;
如果变量后面的字符是变量名的有效字符,但:
不是,则需要使用括号,因此在第四种情况下不需要括号;
说到var=value
、export var=value
和之间的区别setenv var value
;
var=value
在当前 shell 中设置的值$var
;分叉的 shell/进程不会继承该变量及其值;export var=value
$var
在当前环境中设置的值;分叉的 shell/进程将继承该变量及其值;setenv PATH $PATH:/new/path
: 与...一样export var=value
;
$ foo=bar
$ bash
$ echo $foo
$ exit
exit
$ export foo=bar
$ bash
$ echo $foo
bar
顺便说一句,我的 Ubuntu 14.04 没有 的手动条目
export
,但有setenv
。为什么?
如果你输入man setenv
,你会得到 的输出man 3 setenv
,这是来自“Linux 程序员手册”的函数手动输入setenv()
;如前所述,setenv
Ubuntu 中没有名为 的命令,Bash 中也没有内置名为 的命令setenv
,尽管 中有一个setenv
内置的csh
;
export
反而是Bash 内置,要获取有关它的信息,您必须运行help export
:
$ help export
export: export [-fn] [name[=value] ...] or export -p
Set export attribute for shell variables.
Marks each NAME for automatic export to the environment of subsequently
executed commands. If VALUE is supplied, assign VALUE before exporting.
Options:
-f refer to shell functions
-n remove the export property from each NAME
-p display a list of all exported variables and functions
An argument of `--' disables further option processing.
Exit Status:
Returns success unless an invalid option is given or NAME is invalid.