3

操作系统:Solaris

外壳:重击外壳

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

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

4

2 回答 2

4

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

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

考虑:

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

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

env命令的输出由 POSIX 标准规定。这只是变量名称和值,后跟换行符:

name=value

经典地,Bourne shell 简单地以相同的方式列出变量setexport

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

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


概括

  1. 并非所有的 shell 变量都是环境变量。
  2. set命令列出所有 shell 变量,也可能列出函数。
  3. export命令列出环境变量。
  4. 和命令内置在 shell 中setexport
  5. 不带参数的env命令列出了它从执行它的进程继承的环境。
于 2013-03-07T05:04:02.570 回答
0

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

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

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

于 2013-03-07T03:13:12.707 回答