使用Bash在Linux中设置环境变量


74

在中tcsh,我有以下脚本正在工作:

#!/bin/tcsh
setenv X_ROOT /some/specified/path

setenv XDB    ${X_ROOT}/db
setenv PATH   ${X_ROOT}/bin:${PATH}

xrun -d xdb1 -i $1 > $2

tcsh setenvBash中的功能等效于什么?

有直接的模拟吗?环境变量用于查找可执行文件。

Answers:


112

export VAR=value将VAR设置为value。如果需要空格,请用单引号将其引起来export VAR='my val'。如果要对变量进行插值,请使用双引号,例如export VAR="$MY_OTHER_VAR"


5
PS:不需要在最后一个双引号。Shell不会对变量分配执行单词拆分。
詹斯(Jens)2012年

只适合初学者。我不是用普通英语直接理解的:插值“ $ X”表示此处您已经有一个变量X,该变量中填充了一个值,例如“ A”,并且您想先读出该值“ A” ,然后将此值分配为VAR的值。当然,您不希望VAR在此处为字符串“ $ X”。然后上面的注释似乎也合乎逻辑,您甚至不需要“”。对于“ A”的直接分配,请使用“ A”。如果我弄错了,请纠正我。
questionto42

36

人们经常建议写作的原因

VAR=value
export VAR

而不是较短的

export VAR=value

是较长的形式比短形式在更多不同的外壳中起作用。当然,如果您知道自己正在处理bash,则两者都可以正常工作。


27

在Linux上使用Bash设置本地和环境变量

在Bash中检查局部变量或环境变量中是否有LOL变量:

el@server /home/el $ set | grep LOL
el@server /home/el $
el@server /home/el $ env | grep LOL
el@server /home/el $

健全性检查,没有称为LOL的本地或环境变量。

在本地而不是环境中设置一个称为LOL的本地变量。因此设置:

el@server /home/el $ LOL="so wow much code"
el@server /home/el $ set | grep LOL
LOL='so wow much code'
el@server /home/el $ env | grep LOL
el@server /home/el $

变量“ LOL”存在于局部变量中,但不存在于环境变量中。如果重新启动终端,注销/登录或运行,则LOL将消失exec bash

设置一个局部变量,然后清除Bash中的所有局部变量

el@server /home/el $ LOL="so wow much code"
el@server /home/el $ set | grep LOL
LOL='so wow much code'
el@server /home/el $ exec bash
el@server /home/el $ set | grep LOL
el@server /home/el $

您也可以取消设置一个变量:

el@server /home/el $ LOL="so wow much code"
el@server /home/el $ set | grep LOL
LOL='so wow much code'
el@server /home/el $ unset LOL
el@server /home/el $ set | grep LOL
el@server /home/el $

局部变量LOL消失了。

将局部变量提升为环境变量:

el@server /home/el $ DOGE="such variable"
el@server /home/el $ export DOGE
el@server /home/el $ set | grep DOGE
DOGE='such variable'
el@server /home/el $ env | grep DOGE
DOGE=such variable

请注意,导出使其同时显示为局部变量和环境变量。

上面导出的DOGE变量在Bash重置后仍然有效:

el@server /home/el $ exec bash
el@server /home/el $ env | grep DOGE
DOGE=such variable
el@server /home/el $ set | grep DOGE
DOGE='such variable'

取消设置所有环境变量:

您必须拔出一罐Chuck Norris才能重置所有环境变量,而无需注销/登录:

el@server /home/el $ export CAN="chuck norris"
el@server /home/el $ env | grep CAN
CAN=chuck norris
el@server /home/el $ set | grep CAN
CAN='chuck norris'
el@server /home/el $ env -i bash
el@server /home/el $ set | grep CAN
el@server /home/el $ env | grep CAN

您创建了一个环境变量,然后重置终端以摆脱它们。

或者,您可以像这样手动设置和取消设置环境变量:

el@server /home/el $ export FOO="bar"
el@server /home/el $ env | grep FOO
FOO=bar
el@server /home/el $ unset FOO
el@server /home/el $ env | grep FOO
el@server /home/el $

11

VAR=value 将VAR设置为值。

之后,export VAR它也将用于子进程。

export VAR=value 是两者的简写。


3
它不是给父进程而不是子进程吗?如果shell脚本执行导出操作,那么我使用它调用的shell便具有该变量IIRC。
rmeador

3
号“标记为自动导出到随后执行的命令的环境。”,表示导出后执行的子进程。
2008年

1
出于好奇,那引用是从哪里来的?
pbh101

8

我认为您正在寻找export-尽管我可能会错..我以前从未玩过tcsh。使用以下语法:

export VARIABLE=value
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.