我应该如何在 bash 中导出 shell 变量?

我应该如何在 bash 中导出 shell 变量?

我通常在 Linux 中使用 bash 工作,如果需要导出变量,我可能会写:

export LC_ALL=C

然而,最近我从事更多的 Solaris 工作,并且与我一起工作的 Solaris 管理员总是会写:

LC_ALL=C ; export LC_ALL

有什么理由比前者更青睐后者呢?

我猜前者可能不被某些 shell 识别。哪些 shell?

谢谢。

答案1

我认为真正的 Bourne shell(许多商业 Unix 变体上的 /bin/sh)不支持在单个语句中分配和导出。这是我在 Solaris 上度过的日子的记忆。

我不知道新版 Solaris 是否默认使用 bash。无论如何,后一种情况更易于移植,因此我坚持使用。

答案2

在 Solaris 中,/bin/sh 需要两个语句,而 /bin/bash 只需要一个语句即可。在 Linux 上,/bin/sh 通常是 /bin/bash 的符号链接,因此没有区别。

如果您正在编写一个可能由另一个脚本调用的脚本,那么请始终使用两个语句格式。如果脚本没有或不会被调用,只需检查脚本顶部的 shebang 行以查看您使用的 shell。许多 Solaris 脚本使用 /bin/sh,这是许多软件包的默认设置。因此,大多数管理员更喜欢更便携的导出变量的方式。

答案3

如果您主要使用 bash,则可以使用前者,因为自 Solaris 10 以来,您可以将 bash 用作 root shell,而不会产生任何危险的副作用。如果机器必须重新启动到单用户模式并且找不到 bash,则会自动回退到 Bourne Shell。

答案4

我正在使用 Solaris 2.6,大约 1998 年。此版本最初仅附带 sh 和 csh。使用 sh,我发现您需要您提到的两行版本才能看到 env 的正确结果。使用 sunfreeware.org 的 bash,它与一行版本配合使用效果很好。

相关内容