#!/bin/bash 的作用

在 Shell 脚本 (.sh) 的第一行,通常会添加:

#!/bin/bash

这是 shebang(解释器路径声明),它的作用是指定运行该脚本时使用的 shell 解释器

为什么要加 #!/bin/bash

确保脚本用 Bash 运行

  • Linux 可能有多个 shell,如 shbashzshdash 等,不同 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 等系统。

作者 admin

百度广告效果展示