【问题标题】:What's the difference of the command output after inputting the command "env", "export", "set" under Bash Shell in Solaris?在 Solaris 的 Bash Shell 下输入命令“env”、“export”、“set”后的命令输出有什么不同?
【发布时间】:2013-02-22 03:01:37
【问题描述】:

操作系统:Solaris

外壳:Bash 外壳

场景:分别输入命令:“env”、“export”和“set”(不带任何参数),将返回一个变量和值列表。

我的问题:输入三个命令后返回的值有什么区别?

【问题讨论】:

  • 出于好奇,您知道您的 Solaris 机器上有哪个 bash 版本吗?我在一个 Solaris 9 盒子上试了一下,得到了GNU bash, version 2.05.0(1)-release (sparc-sun-solaris2.9),它比我预期的要老(但话又说回来,Solaris 9 还不是第一次进入老年期,更不用说年轻了)。
  • 我的版本是GNU bash, version 3.00.16(1)-release (sparc-sun-solaris2.10)

标签: bash shell export solaris env


【解决方案1】:

set 命令向您显示会话中定义的所有 shell 变量。

export 命令列出了上述命令的一个子集(通常)。这些是使用 exportdeclare -x 创建的:全局可见的变量 - 即,对子进程可见。

env 命令用于启用将脚本从帐户移植到另一个帐户或机器到机器。 env 在修改或不同的环境中运行程序。

【讨论】:

    【解决方案2】:

    envexport 命令产生相同的信息,但格式不同。而bashexport 产生的输出与ksh 或(Bourne)shell 版本的输出完全不同。请注意,setexport 是 shell 内置命令,但 env 是一个外部命令,除了列出环境的内容之外还有其他用途(尽管这是它的用途之一)。

    set 命令列出您创建的变量。这包括环境变量、常规(非环境)变量、函数定义(我们将在这里忽略)。

    考虑:

    x1=abc
    x2=def; export x2
    export x3=ghi
    

    有两个导出变量(x2x3)和一个常规(非导出)变量。 set 命令将列出所有三个; exportenv 只会列出导出的。

    env 命令的输出是 POSIX 标准强制要求的。这只是变量名称和值后跟换行符:

    name=value
    

    传统上,Bourne shell 只是以相同的方式为setexport 列出变量。

    如果值包含空格或其他需要保护的字符,Korn shell 会将值括在引号中,否则使用name=value 表示法。

    bash 中的 set 命令生成赋值,其值用引号保护。但是,export 的输出是带有引号保护的 declare -x var=value。一般的想法大概是您可以使用export > file 后跟source file 将环境变量重置为您执行export 时环境中的值。


    总结

    1. 并非所有 shell 变量都是环境变量。
    2. set 命令列出所有 shell 变量,也可能列出函数。
    3. export 命令列出环境变量。
    4. setexport 命令内置在 shell 中。
    5. 不带参数的env 命令列出了它从执行它的进程继承的环境。

    【讨论】:

    • 非常感谢。我想我已经很清楚区别了
    猜你喜欢
    • 2016-10-10
    • 2011-12-12
    • 2017-05-01
    • 1970-01-01
    • 2015-02-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多