我通常在Linux下工作,如果我需要导出一个variables,我可能会写:
export LC_ALL=C
但是,我现在正在做更多的Solaris工作,而且我所使用的Solaris Admin将始终写入:
LC_ALL=C ; export LC_ALL
有没有理由比后者更喜欢后者?
我想前者可能不被某些炮弹所认可。 哪个?
谢谢。
我相信真正的Bourne shell(许多商业Unix变体中的/ bin / sh)不支持在单个语句中分配和导出。 这就是我在Solaris上的记忆。
我不知道新的Solaris版本是否默认使用bash。 无论如何,你的后一种情况是更便携,所以我坚持。
在Solaris中,/ bin / sh需要两条语句,而/ bin / bash在一条语句中可以。 在linux上,/ bin / sh通常是/ bin / bash的符号链接,所以没有区别。
如果您正在编写可能来自另一个脚本的脚本,则始终使用两种语句格式。 如果脚本不是或者不会被获取,只需检查脚本顶部的shebang行,看看你使用的是哪个shell。 许多Solaris脚本使用/ bin / sh,这是许多软件包的默认设置。 因此,大多数pipe理员喜欢更容易导出variables的方式。
如果您主要使用bash,则可以使用前者,因为您可以使用bash作为root shell,而且从Solaris 10开始没有任何危险的副作用。如果计算机必须重新引导到单个用户,并且不会findbash,那么会自动回退到Bourne Shell。
我知道的任何现代Bourne派生的shell都支持all-in-oneforms。 我认为旧版本的Bourne shell可能需要单独的版本。
我正在使用Solaris 2.6,大约在1998年。这个版本最初只带有sh和csh。 使用sh,我看到你需要你提到的两行版本才能看到env的正确结果。 从sunfreeware.org使用bash,并且与单行版本一起工作正常。
在一个Posix shell中,“typeset”可以声明一个variables,设置一个值,并在“单个”语句中导出。
typeset -x foo=bar
这种行为适用于Posix Shell和Korn Shell。