SHELL变量和路径

时间:2019-04-29 03:17:26  来源:igfitidea点击:

Shell变量和环境

像大多数shell一样,Bash可以将文本和数字存储到变量中以供之后检索。在shell中,使用类似于 hum=bug的命令设置变量。这会将变量hum设置为bug的文本值。要取回存储的信息,可以指定以 $开头的变量名:

john@john-desktop:~$ hum=bug
john@john-desktop:~$ echo hum
hum
john@john-desktop:~$ echo $hum
bug

请注意,只有在变量名之前放置 $符号时,才显示变量的内容。还请记住,在分配变量时,在等号前后不能有任何空格!

Shell变量仅在创建它们的shell中可见。环境变量的不同之处在于,启动外部命令时,它们会传递给子进程。所有环境变量都是shell变量。但是,shell变量不是环境变量。export命令用来创建一个环境变量。

john@john-desktop:~$ hum=bug
john@john-desktop:~$ export hum
john@john-desktop:~$ echo $hum
bug
john@john-desktop:~$ export hum=bug
john@john-desktop:~$ echo $hum
bug

要显示所有环境变量,可以使用不带任何参数的 export命令。不带参数使用的 env命令也将显示当前环境。将显示所有shell变量和环境变量。

在以下示例中,我们使用bah启动子shell。请注意,一旦我们退出子shell并返回到父shell,就不会定义变量 $bah

john@john-desktop:~$ env bah=hum bash
john@john-desktop:~$ echo $bah
hum
john@john-desktop:~$ exit
exit
john@john-desktop:~$ echo $bah

john@john-desktop:~$ 

如果需要从变量中删除值,则可以使用 unset命令。如果要从环境中删除变量,但将其保留为shell程序变量,则可以使用 export -n选项:

john@john-desktop:~$ export hum=bug
john@john-desktop:~$ export -n hum
john@john-desktop:~$ unset hum

在上面的示例中,我们将hum导出为环境变量,然后将hum从环境中删除,因此它仅成为shell变量。最后,我们使用unset命令将其删除。

什么是路径$PATH

每当您从命令行运行程序时,Bash实际上都会在目录列表中搜索以查找您所请求的程序。例如,当您运行 ls命令时,如果不查看可能的位置列表,Bash将不知道此命令的位置。此位置列表实际上存储在名为$PATH的变量中。此变量包含用冒号分隔的要搜索的目录列表。如果使用命令 echo $PATH,您将看到目录列表。

john@john-desktop:~$ echo $PATH
/usr/lib/lightdm/lightdm:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games

您的 $PATH可能与我的不同,但是,将搜索每个目录,直到找到合适的程序为止。就我而言,可以在 / usr / bin目录中找到 ls

john@john-desktop:/bin$whereis ls
ls: /bin/ls /usr/share/man/man1/ls.1.gz

如果需要添加到PATH,则可以通过以下方式从命令行执行此操作: PATH=$PATH:~mynewbindir。现在使用echo $PATH,您现在应该看到目录已添加到搜索列表的末尾。

john@john-desktop:~$ PATH=$PATH:~mynewdir
john@john-desktop:~$ echo $PATH
/usr/lib/lightdm/lightdm:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:~mynewbindir

whereis命令

我们可以通过使用 whereis命令来定位程序的位置。但是,我们也可以使用 which -a命令,该命令将在PATH变量中显示给定程序的所有实例。

john@john-desktop:~$ which -a ip

/sbin/ip

/bin/ip

which命令

还可以通过使用 whereis命令来定位程序的位置。

john@john-desktop:~$ which ls
/bin/ls