关于Linux操作系统中当前shell进程与子shell进程的详细解释
如上图所示,使用ps -f可以当前查看Linux操作系统中当前正在运行的进程。
然后敲bash后,相当于在当前的bash shell环境下又创建了一个子bash shell的进程,
如上图所示,后来创建的bash shell的PPID是前一个bash shell的PID
使用./hello.sh的方式去调用脚本就相当于是在原来bash shell的基础上又开了一个子bash shell,然后在子bash shell中去调用脚本。
敲exit命令时会发现没有退出Linux操作系统就在于当前是在子shell进程中,
开子shell与不开子shell的区别就在于,环境变量的继承关系,如在子shell中设置的当前变量,父shell中是不可见的。
系统预定义变量
在shell编程中存在系统变量和用户变量,其中系统变量的作用范围是全局,而用户变量的作用范围却是分为全局变量和局部变量。
局部变量是只对当前的bash起效。
Linux操作系统中shell编程的系统变量大部分是全局变量,小部分是局部变量。
$HOME表示当前用户的家目录,$PWD表示当前用户的工作目录,$SHELL表示当前的shell会话,$USER表示当前的用户,
如果想查看当前所有的全局环境变量的话,就是用env,printenv的功能和普通的env大致是一样的。
如果想使用系统变量,就使用echo或者printenv加系统变量。
如上图所示,如果只是想查看当前系统变量的值的话,加不加$符无所谓但是如果想使用系统变量的值的话,就必须加上$了。
在Linux操作系统中可以使用set命令可以用来显示当前所有的shell变量(包括环境变量)及其值。
用户的自定义变量
如上图所示,在Linux操作系统中shell编程语言中关于用户变量的定义只需要变量名=变量值,就可以直接定义变量,不需要像其他编程语言一样去定义变量的类型再去给变量赋值,如果变量值中有空格就需要我们将将变量值用引号引起来才能生效,这时定义的变量属于用户变量中的局部变量,即在原来的bash环境中有,在子bash中没有&