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

pbh*_*101 70 unix linux bash shell

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
Run Code Online (Sandbox Code Playgroud)

什么是tcsh setenvBash中的功能?

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

mip*_*adi 105

export VAR=value将VAR设置为值.如果你想要空格,请用单引号括起来export VAR='my val'.如果要插入变量,请使用双引号export VAR="$MY_OTHER_VAR".

  • PS:最后一个不需要双引号.shell不会对变量赋值执行分词. (4认同)
  • 仅供初学者使用。我没有直接理解它,用普通英语来说: interpolate "$X" 意味着你已经有一个变量 X 填充了一个值,例如“A”,并且你想先读出该值“A” ,然后将该值赋为VAR的值。当然,你不希望 VAR 是一串“$X”。然后上面的评论似乎也合乎逻辑,你甚至不需要“”。对于“A”的直接赋值,请使用“A”。如果我错了,请纠正我。 (2认同)

zap*_*hod 33

人们经常建议写作的原因

VAR=value
export VAR
Run Code Online (Sandbox Code Playgroud)

而不是更短

export VAR=value
Run Code Online (Sandbox Code Playgroud)

更长的形式是在比短形式更多不同的壳中起作用.如果你知道你正在处理bash,当然要么工作正常.


Eri*_*ski 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 $
Run Code Online (Sandbox Code Playgroud)

完整性检查,没有称为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 $
Run Code Online (Sandbox Code Playgroud)

变量'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 $
Run Code Online (Sandbox Code Playgroud)

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

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 $
Run Code Online (Sandbox Code Playgroud)

局部变量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
Run Code Online (Sandbox Code Playgroud)

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

上面导出的变量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'
Run Code Online (Sandbox Code Playgroud)

取消设置所有环境变量:

您必须拔出一罐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
Run Code Online (Sandbox Code Playgroud)

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

或者您可以手动设置和取消设置环境变量,如下所示:

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 $
Run Code Online (Sandbox Code Playgroud)


iny*_*iny 11

VAR=value 将VAR设置为值.

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

export VAR=value 是两者的简写.

  • 不是它给父母的过程,而不是孩子?如果shell脚本执行导出,那么我调用它的shell具有该变量IIRC. (3认同)
  • 编号"标记为自动导出到后续执行的命令的环境.",表示导出后执行的子进程. (3认同)

Oli*_*Oli 7

我想你正在寻找export- 虽然我可能是错的..我以前从未玩过tcsh.使用以下语法:

export VARIABLE=value
Run Code Online (Sandbox Code Playgroud)