1. 环境变量
1. 全局与局部环境变量
(1)全局环境变量
命令
env
printenv
echo
示例1:
[hadoop@hadoop1 ~]$ env
SPARK_HOME=/home/hadoop/spark-current
HOSTNAME=hadoop1
TERM=xterm-256color
SHELL=/bin/bash
...
示例2:
[hadoop@hadoop1 ~]$ printenv JAVA_HOME
/tools/java-current
示例3:
[hadoop@hadoop1 ~]$ echo $JAVA_HOME
/tools/java-current
(2)局部环境变量
set
命令会显示为某个特定进程设置的所有环境变量,包括局部变量、全局变量 10 以及用户定义变量。
所有通过printenv命令能看到的全局环境变量都出现在了set命令的输出中。
但在set命令的输出中还有其他一些环境变量,即局部环境变量和用户定义变量。
命令env、printenv和set之间的差异很细微。set命令会显示出全局变量、局部变量以 及用户定义变量。它还会按照字母顺序对结果进行排序。env和printenv命令同set命 令的区别在于前两个命令不会对变量排序,也不会输出局部变量和用户定义变量。在这 种情况下,env和printenv的输出是重复的。不过env命令有一个printenv没有的功能, 这使得它要更有用一些。
2. 用户自定义变量
[hadoop@hadoop1 ~]$ echo $a
hi
[hadoop@hadoop1 ~]$ a="hi"
[hadoop@hadoop1 ~]$ echo $a
hi
[hadoop@hadoop1 ~]$ a=hi world
-bash: world: command not found
1.值无空格可以不要引号。有空格需要引号。
2.记住,变量名、等号和值之间没有空格,这一点非常重要。如果在赋值表达式中加上了空格, bash shell就会把值当成一个单独的命令。
[hadoop@hadoop1 ~]$ a = vv
-bash: a: command not found
所有的环境变量名均使用大写字母,这是bash shell的标准惯例。如果是你自己创建的局 部变量或是shell脚本,请使用小写字母。变量名区分大小写。在涉及用户定义的局部变量 时坚持使用小写字母,这能够避免重新定义系统环境变量可能带来的灾难。
只能当前shell使用:设置了局部环境变量后,就能在shell进程的任何地方使用它了。但是,如果生成了另外一个 shell,它在子shell中就不可用。
3. 全局环境变量
4. 数组变量
[hadoop@hadoop1 ~]$ mytest=(one two three)
[hadoop@hadoop1 ~]$ echo $mytest
one
[hadoop@hadoop1 ~]$ echo $mytest[1]
one[1]
[hadoop@hadoop1 ~]$ echo ${mytest[1]}
two
echo $mytest
只有数组的第一个值显示出来了。要引用一个单独的数组元素,就必须用代表它在数组中位 置的数值索引值。索引值要用方括号括起来。
要显示整个数组变量,可用星号作为通配符放在索引值的位置。
[hadoop@hadoop1 ~]$ echo ${mytest[*]}
one two three