#!/bin/bash 的作用
在 Shell 脚本 (.sh) 的第一行,通常会添加:
#!/bin/bash
这是 shebang(解释器路径声明),它的作用是指定运行该脚本时使用的 shell 解释器。
为什么要加 #!/bin/bash?
确保脚本用 Bash 运行:
- Linux 可能有多个 shell,如 
sh、bash、zsh、dash等,不同 shell 语法可能不同。 #!/bin/bash明确指定 使用 Bash 解释器,避免sh运行时出现语法错误。
提高兼容性:
不同 Linux 发行版 的默认 shell 可能不同,如:
- Ubuntu/Debian:默认 
/bin/dash - CentOS/RHEL:默认 
/bin/bash 
指定 #!/bin/bash 可以避免 使用错误的 shell 解释器 运行。
避免 sh 运行导致功能异常:
在某些系统中,sh 实际上可能是 /bin/dash 的符号链接,dash 不支持 bash 的扩展语法,如:
# 只在 bash 下可用,但 dash 不支持
arr=(“A” “B” “C”)
echo ${arr[@]}
不加 #!/bin/bash 会怎样?
情况 1:用 bash script.sh 运行
bash script.sh
这样不需要 #!/bin/bash,因为你手动指定了 bash 解释器。
情况 2:用 ./script.sh 运行
./script.sh
如果 #!/bin/bash 不写,可能会默认用 /bin/sh 解释,导致 不支持 bash 特性 而出错。
情况 3:用 crontab 运行
* * * * * /path/to/script.sh
cron 默认使用 /bin/sh,如果 script.sh 里用了 bash 语法,可能报错。
#!/bin/bash VS #!/bin/sh
| Shebang | 解释器 | 适用场景 | 是否推荐 | 
|---|---|---|---|
#!/bin/bash | 
Bash(功能丰富) | 需要 Bash 特性时 | ✅ 推荐 | 
#!/bin/sh | 
/bin/sh(可能是 dash) | 
仅使用 POSIX 语法 | ⚠️ 兼容性问题 | 
#!/usr/bin/env bash | 
动态查找 Bash | 适用于不同 Linux 发行版 | ✅ 推荐(更通用) | 
#!/usr/bin/env bash 的优势
某些系统 bash 不在 /bin/bash,可以改用:
#!/usr/bin/env bash
作用:env 命令会自动查找 bash 位置,更通用,适用于 macOS、Linux、BSD 等系统。