linux的子shell到底是怎么定义的呢?
复制代码代码如下:
[root@jbxue ~]# a=123
[root@jbxue ~]# (echo $a) 123 [root@jbxue ~]# echo "echo $a" > 1.sh [root@jbxue ~]# cat 1.sh echo $a [root@jbxue ~]# bash 1.sh [root@jbxue ~]#
man一下bash就可以查到,()中的命令会打开一个子shell去执行。在执行脚本的时候也会打开一个子shell去执行脚本程序,可是为什么结果不一样呢?
复制代码代码如下:
[root@jbxue ~]# echo $BASH_SUBSHELL
BASH_SUBSHELL这个变量指的是当前shell的层数
通过BASH_SUBSEHLL可以看出()这个操作确实在子shell中运行。
还需要指出的就是:bash自带的shell变量,有些是自动变化的,有些是只读的,有些是不会自动变化只有重新初始化shell才会更新比如$$,$?等。
复制代码代码如下:
[root@jbxue ~]# adsfasdf
(责任编辑:IT)bash: adsfasdf: command not found [root@jbxue ~]# (echo $?) 127 |