SHELL变量和路径
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