改变“PATH”环境变量的正确方法是什么?

改变“PATH”环境变量的正确方法是什么?

当谈到改变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

的用途是什么{ }?什么时候需要" "?什么时候使用exportsetenv?顺便说一句,我的 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:setenvcsh内置的;它应该与 相同PATH=$PATH:/new/path

单引号/双引号均可防止 Bash 因空格而中断;单引号会防止 Bash 执行参数扩展、命令替换或算术扩展,从而强制 Bash 按字面意思解释括起来的字符串;双引号则不会防止 Bash 执行参数扩展、命令替换或算术扩展,而在第二种情况下,需要使用双引号来允许参数扩展$PATH

如果变量后面的字符是变量名的有效字符,但:不是,则需要使用括号,因此在第四种情况下不需要括号;

说到var=valueexport 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();如前所述,setenvUbuntu 中没有名为 的命令,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.

相关内容