操作系统:Solaris
外壳:重击外壳
场景:分别输入命令:“env”、“export”和“set”(不带任何参数),将返回一个变量和值列表。
我的问题:输入三个命令后返回的值有什么区别?
env
andexport
命令产生相同的信息,但格式不同。And bash
's产生与or (Bourne) shell 版本export
的输出完全不同的输出。ksh
请注意,set
andexport
是 shell 内置命令,但env
它是一个外部命令,除了列出环境的内容之外还有其他用途(尽管这是它的用途之一)。
该set
命令列出了您创建的变量。这包括环境变量、常规(非环境)变量和函数定义(我们将在此忽略)。
考虑:
x1=abc
x2=def; export x2
export x3=ghi
有两个导出变量(x2
和x3
)和一个常规(非导出)变量。该set
命令将列出所有三个;export
并且env
只会列出导出的。
该env
命令的输出由 POSIX 标准规定。这只是变量名称和值,后跟换行符:
name=value
经典地,Bourne shell 简单地以相同的方式列出变量set
和export
。
如果值包含空格或其他需要保护的字符,Korn shell 会将值括在引号中,否则使用该name=value
符号。
set
in 命令生成赋值,其bash
值用引号保护。但是,输出export
是declare -x var=value
带引号保护的。一般的想法可能是您可以使用export > file
后跟source file
将环境变量重置为您执行export
.
set
命令列出所有 shell 变量,也可能列出函数。export
命令列出环境变量。set
。export
env
命令列出了它从执行它的进程继承的环境。该set
命令向您显示会话中定义的所有 shell 变量。
该export
命令列出了上述的一个子集(通常)。这些是使用export
或declare -x
: 全局可见的变量创建的 - 即,对子进程可见。
该env
命令用于启用将脚本从帐户移植到另一个帐户或机器到机器。env 在修改或不同的环境中运行程序。