父shell 和 子 shell,那么会想到 export 这个命令。export 也是 bash 的一个内置命令。它主要是用来将父 shell 里的变量导出供子 shell 使用。

        它有如下特征:

1. 用 export 导出的变量放在“导出变量列表”中,它可以被子 shell (子 shell 的子 shell 也是如此)拷贝并使用。

2. 被 export 出来的变量虽然可以被子 shell 使用,但它也只是一个拷贝,而不会影响到父 shell 中的值以及其它子 shell 中的值。

=======================================================================================

在父shell中可以用export 来导出一个变量,在子shell 中就可以继承该变量,但在子shell中用export 导出

的变量并不能影响父shell变量的值

=========================================================================================

子 shell 向父 shell 传递自己的变量方法:

                                                             

通过一个中间文件进行:

#!/bin/bash

(
 subvar="hello shell"
 echo "$subvar" > temp.txt
)

read pvar < temp.txt

echo $pvar

-------------------------------------------------------------------------------------------------

  1. 通过命令替换:

    #!/bin/bash
    
    pvar=`subvar="hello shell";echo $subvar`
    
    echo $pvar

  执行命令替换符(两个反单引号)之间的命令也是在子 shell 来完成的。

----------------------------------------------------------------------------------------------

  1. 使用命名管道:

    #!/bin/bash
    
    mkfifo -m 777 npipe
    
    (
      subsend="hello world"
      echo "$subsend" > npipe &
     )
    
    read pread < npipe
    
    echo "$pread"
    
    exit 0

运行输出:

beyes@debian:~/shell$ ./var.sh
hello world

关于有名管道创建命令 mkfifo 可参考:http://www.groad.net/bbs/read.php?tid-3707.html

  1. 使用 here 文档:

    #!/bin/bash
    
    read pvar << HERE
    `subvar="hello shell"
    echo $subvar`
    HERE
    
    echo $pvar

运行输出:

$ ./subandp.sh
hello shell

方法应该还有很多,这些方法的本质原理基于进程间的通信。

-----------------------------------------------------------------------------------