请考虑以下内容:你希望程序打印出你的用户名。这个程序怎么知道的?在 Linux 中有一些环境变量。这意味着你的 shell 中有许多变量,其中许多变量自动设置,每次运行程序时,其中一些变量将传递给该程序。
详细说明:
-
一些变量只为你当前的 shell 设置。它们被称为本地 shell 变量。你可以通过键入
set
,一个 bash 内置命令来列出它们 ,这意味着没有启动其它程序,之后你执行了它。此命令由 bash 本身处理。 -
其他变量被传递到你从当前 shell 启动的每个程序。它们被称为环境变量,可以通过
env
程序列出,这意味着,通过键入env
, 你将看到,你启动的每个程序获得了什么变量。
你可能想要深入挖掘。要做到这一点,掌握subshell的概念,这是一个子进程,当你运行程序时创建,并且成为你的程序。
现在,你将学习如何创建变量以及如何使用变量。
这样做
- 1: foo='Hello World!'
- 2: echo $foo
- 3: set | grep foo
- 4: env | grep foo
- 5: export foo
- 6: env | grep foo
- 7: foo='ls -al'
- 8: $foo
你会看到什么
- uset1@vm1:~$ foo='Hello World!'
- user1@vm1:~$ echo $foo
- Hello World!
- user1@vm1:~$ set | grep foo
- foo='Hello World!'
- user1@vm1:~$ env | grep foo
- user1@vm1:~$ export foo
- user1@vm1:~$ env | grep foo
- foo=Hello World!
- user1@vm1:~$ foo='ls -al'
- user1@vm1:~$ $foo
- total 36
- drwxr-xr-x 2 user1 user1 4096 Jun 14 12:23 .
- drwxr-xr-x 3 root root 4096 Jun 6 21:49 ..
- -rw------- 1 user1 user1 4042 Jun 15 18:52 .bash_history
- -rw-r--r-- 1 user1 user1 220 Jun 6 21:48 .bash_logout
- -rw-r--r-- 1 user1 user1 3184 Jun 14 12:24 .bashrc
- -rw------- 1 user1 user1 50 Jun 15 18:41 .lesshst
- -rw-r--r-- 1 user1 user1 697 Jun 7 12:25 .profile
- -rw-r--r-- 1 user1 user1 741 Jun 7 12:19 .profile.bak
- -rw-r--r-- 1 user1 user1 741 Jun 7 13:12 .profile.bak1
解释
- 创建变量
foo
,并将Hello World!
这一行放在其中。 - 打印出变量
foo
。 - 打印所有环境变量的列表,它传递给
grep
,打印出只包含变量foo
的行。注意变量foo
存在。 - 打印所有环境变量列表,它们传递给你执行的任何程序。注意变量
foo
不存在。 - 使变量
foo
可用于从当前 shell 执行的所有程序。 - 现在你可以看到,你的变量确实可用于你执行的所有程序。
- 将
ls /
放入变量foo
。 - 执行包含在变量
foo
中的命令。