为什么要先设置一个变量,然后导出它,而不是在一个命令中设置和导出?

为什么要先设置一个变量,然后导出它,而不是在一个命令中设置和导出?

如果gpg-agent执行,则输出可由shell直接处理的数据,例如:

SSH_AUTH_SOCK=/tmp/ssh-apeOFqMF3292/agent.3292; export SSH_AUTH_SOCK;
SSH_AGENT_PID=3293; export SSH_AGENT_PID;
echo Agent pid 3293;

为什么要这样做gpg-agent?我见过更多的程序这样做。以前的shell不支持吗export var=val?哪些 shell 不支持内置的替代 shell?

我正在 Kubuntu 中使用 bash。

答案1

传统的 Bourne shell 不支持组合它们(尽管 System V 允许您省略;;4.2BSD / SunOS shell 则不支持)。它是由 Korn shell 添加的(export与Bourne shell 的csh's交叉setenv),随后被其他 shell 和 POSIX.2 采用。许多商业 Unix 仍然提供 Bourne shell 的 System V 变体/bin/sh,因此保留兼容性对于可移植性来说是一个好主意。

答案2

它不适用于常量字符串,但养成将其作为两个单独命令执行的习惯的一个原因是export FOO=$(mycmd)掩盖退出状态mycmd - 即使mycmd失败它也会报告成功。看 变量赋值的返回状态是如何确定的?ShellCheck 维基

相关内容