1
2
3
4
5
6
(
command1
command2
...
commandn
)
  • 子Shell变量的作用域不能在父Shell中生效,export的环境变量也不能生效。
    子Shell只能继承父Shell的一些属性,子Shell不能反过来改变父Shell的属性。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    # 可以继承的属性
    # 当前工作目录
    # 环境变量
    # 标准输入、标准输出和标准错误输出
    # 所有已打开的文件标识符
    # 被忽略的信号处理

    # 不能继承的属性
    # 除环境变量和.bahsrc文件中定义的变量之外的Shell变量
    # 未被忽略的信号处理
  • 子Shell可以接收父Shell从管道传送的数据。

    1
    cat /etc/passwd | (grep "root")  # 打印/etc/passwd文件中与root关键字所匹配的行
  • 可以将计算量大的任务分成若干个小任务并行执行

    1
    2
    3
    4
    5
    6
    # 圆括号后的“&”表示将此命令放在后台执行,继续执行下一命令
    (grep -r "root" /etc/* | sort > part1) & # 搜索,排序,输出
    (grep -r "root" /usr/local/* | sort > part2) &
    (grep -r "root" /lib/* | sort > part3) &
    wait # 等待后台执行的作业全部完成后再执行下面的命令
    cat part1 part2 part3 | sort > part_total # 合并后排序、输出
  • 子Shell允许嵌套调用,可以在函数或圆括号结构内再次调用圆括号结构创建子Shell

    Shell的限制模式

  •