提问人:JL Peyret 提问时间:8/4/2023 最后编辑:JL Peyret 更新时间:8/4/2023 访问量:124
如何判断变量是否在 zsh(或 bash)中导出?
How can I tell if a variable was exported or not in zsh (or bash)?
问:
在终端上,我怎样才能轻松区分
- 一个 shell 变量:
foo=foovalue
和
- 导出的环境变量: ,可由子进程使用吗?
export bar=barvalue
我知道并命令。 报告这两种情况,但没有说明哪个是哪个。 不报告 1)。set
env
set
env
示例终端会话
(在 ZSH + macOS 上,但这应该无关紧要):
$foo=foovalue
$export bar=barvalue
$set | egrep "^foo|^bar"
bar=barvalue
foo=foovalue
$env | egrep "^foo|^bar"
bar=barvalue
有什么方法可以同时看到 和 ,但也表明这是一个仅限 bash 的变量,对 Python 或 Ruby 脚本等子进程不可见?通常,当我的脚本没有看到我所期望的内容时,我最终会做的是 greping 我的 shell 脚本并查找变量的定义位置。它有效,但充其量是笨拙的。foo
bar
foo
答:
0赞
Bhagyashri patil
8/4/2023
#1
variable_name="some value"
export variable_name
检查变量是否已导出:
declare -p variable_name | grep -q 'declare -x'
if [ $? -eq 0 ]; then
echo "The variable was exported."
else
echo "The variable was not exported."
fi
评论
1赞
Charles Duffy
8/4/2023
为什么检查$
?来查看命令是否成功是反模式?-- 最好运行并避免额外的步骤。if declare -p variable_name | grep -q 'declare -x'; then
[
1赞
Charles Duffy
8/4/2023
...也就是说,OP 似乎实际上运行的是 zsh,而不是 bash,它可以输出命令并且根本不匹配模式。declare -p
typeset
declare -x
0赞
Charles Duffy
8/4/2023
此外,请考虑上述代码失败的情况。unexported_var='declare -x'
3赞
iBug
8/4/2023
#2
使用并检查输出。例如:declare -p
declare -- BASH="/bin/bash"
declare -x EDITOR="vim"
哪个是导出的,哪个是不导出的,这是显而易见的。
评论
0赞
JL Peyret
8/4/2023
如前所述,在 ZSH 上看起来有点不同。但没关系,对我来说,我不是在解析结果,只是用我的 Mk I 眼球评估它们。
评论
declare -p foo bar
,并查看输出是否显示 或declare --
declare -x
export foo
export -n foo