Bash 括号:()、{}、[]、$()、$(() )、${}、[[]]区别

更新于 2025-12-09

1. $(command) —— 命令替换(Command Substitution)

作用:执行括号内的命令,把输出结果当成变量值返回。

log_file="/var/log/syslog"
keyword="error"
output=$(grep "$keyword" "$log_file")

结果:$output 里保存 grep 的输出内容。

常用于:动态获取命令结果(如时间、路径、统计结果等)。

对比:反引号 `cmd` 也能实现,但 $() 更可读、可嵌套。

2. {} —— 命令组 / Brace Expansion

命令组(Command Group)

{ sudo apt install exa; echo "Installed exa"; }

一组命令在同一个 shell 环境中顺序执行。

批量展开(Brace Expansion)

for file in backup_{1..4}.tar.gz; do
  echo "$file"
done

输出:backup_1.tar.gz … backup_4.tar.gz

常用于批量生成文件名、序列。

3. () —— 子进程(Subshell)

作用:执行括号中的命令,但在独立的子 shell 中进行。

(cd /tmp; ls)

不会影响当前 shell 的工作目录。

与 {} 不同:{} 共享环境,() 独立环境。

4. [ ]—— 条件测试(Test Command)

作用:判断条件是否成立,用于 if 判断。

file="/etc/passwd"
if [ -f "$file" ]; then
  echo "File exists"
fi

-f:文件存在
-d:目录存在
-z:字符串为空
注意:方括号两边必须有空格!

5. [[ ]] —— 高级条件测试(Extended Test)

作用:增强版 [ ],支持正则匹配、逻辑运算等。

user=$USER
if [[ $user == "root" || $user == "admin" ]]; then
  echo "Welcome, superuser!"
fi

支持 &&、||
支持通配符和正则
不需为变量加引号
推荐:脚本里尽量用 [[ ]],比 [ ] 安全、现代。

6. ${} —— 参数扩展(Parameter Expansion)

作用:取变量值,或修改变量值。

filename="report.txt"
backup="${filename%.txt}.bak"
echo $backup   # report.bak

支持多种操作:
${var:-default}:为空时用默认值
${var%pattern}:删除匹配后缀
${var#pattern}:删除匹配前缀
非常强大,是 Bash 变量处理的关键工具。

7. $(( ))—— 算术运算(Arithmetic Expansion)

作用:执行整数运算。

num1=5
num2=3
result=$(( num1 * num2 + 1 ))
echo $result   # 16

比 expr 更简洁、更快。
可做加减乘除、自增自减。

浙ICP备19039918号-1