#!/bin/bash name=flykhan echo "0 $name" echo "main $$" # 使用圆括号创建子shell # () 不影响 (name=Lucy; echo "1 $name"; echo "() $$") echo "0 $name" # 使用花括号进行命令扩展和分组,记得语句后的 ';' { name=Jack; echo "2 $name"; echo "{} $$"; } echo "0 $name" # 在 Bash 脚本中,圆括号 `()` 和花括号 `{}` 有不同的用途和行为。 # 1. 圆括号 `()` # - 用途: # - 创建子shell:在圆括号中的命令序列将在一个子shell 中执行,子shell 是一个独立的进程,它会继承父shell 的环境变量和文件描述符,但是变量的修改在子shell 中不会影响到父shell。 # - 数组赋值:在圆括号中可以定义数组,并将值赋给数组。 # - 示例: # ```bash # (command1; command2; command3) # ``` # - 注意事项: # - 在圆括号中的命令序列与外部环境是隔离的,所以在子shell 中定义的变量对于父shell 是不可见的。 # 2. 花括号 `{}` # - 用途: # - 命令扩展和分组:花括号可以用于扩展和分组命令,可以将多个命令组合在一起,作为一个整体进行处理。 # - 文件名扩展:花括号可以用于生成文件名的列表,例如使用通配符进行文件名扩展。 # - 示例: # ```bash # { command1; command2; } # ``` # - 注意事项: # - 花括号中的命令序列会在当前shell 中执行,不会创建子shell。 # - 花括号中的命令序列可以使用分号 `;` 或换行符分隔多个命令。 # 总结: # - 圆括号 `()` 用于创建子shell,并在子shell 中执行命令序列。 # - 花括号 `{}` 用于命令扩展和分组,将多个命令组合在一起进行处理。