网站建设 丽水,个人适合建什么网站,制作公司官网西安,优化电池充电有必要开吗sh 与 bash 的区别详解
1. 历史背景 sh (Bourne Shell)#xff1a; 由 Stephen Bourne 在 1977 年开发#xff0c;是 Unix 系统的默认 Shell。语法简洁#xff0c;但功能有限。 bash (Bourne Again Shell)#xff1a; 由 Brian Fox 在 1989 年开发#xff0c;是 sh 的扩…sh 与 bash 的区别详解
1. 历史背景 sh (Bourne Shell) 由 Stephen Bourne 在 1977 年开发是 Unix 系统的默认 Shell。语法简洁但功能有限。 bash (Bourne Again Shell) 由 Brian Fox 在 1989 年开发是 sh 的扩展版本兼容 sh 语法并添加了大量新特性如命令行编辑、历史记录等。 2. 主要区别与示例
2.1 脚本声明差异 sh 脚本 默认使用 #!/bin/sh遵循 POSIX 标准。 #!/bin/sh
echo Hello, sh!bash 脚本 使用 #!/bin/bash支持非 POSIX 扩展语法。 #!/bin/bash
echo Hello, bash!2.2 变量与数组 sh 不支持数组 sh 原生不支持数组需用字符串模拟 #!/bin/sh
listone two three
for item in $list; doecho $item
donebash 支持数组 bash 提供原生数组语法 #!/bin/bash
arr(one two three)
echo First element: ${arr[0]} # 输出 one2.3 字符串操作 sh 功能有限 字符串截取需依赖外部命令如 cut #!/bin/sh
strabcdef
substr$(echo $str | cut -c1-3) # 输出 abcbash 内置字符串操作 支持直接截取 #!/bin/bash
strabcdef
substr${str:0:3} # 输出 abc2.4 条件测试语法 sh 使用 test 或 [ ] sh 不支持 [[ ]]需严格遵循空格规则 #!/bin/sh
if [ $a -eq 1 ] [ $b -eq 2 ]; thenecho Conditions met.
fibash 支持 [[ ]] 更安全的语法支持正则匹配 #!/bin/bash
if [[ $a 1 $b ~ ^2 ]]; thenecho Conditions met.
fi2.5 命令行扩展 bash 特有扩展 大括号扩展echo {1..5} # 输出 1 2 3 4 5进程替换diff (ls dir1) (ls dir2)sh 不支持上述语法。 2.6 错误处理 bash 支持更多选项 如 set -e出错退出和 set -o pipefail管道错误捕获 #!/bin/bash
set -euo pipefail
grep pattern file.txt | sortsh 对部分选项支持有限。 3. 兼容性
bash 兼容模式 通过 #!/bin/sh 调用 bash 时若 bash 是系统默认 Shell会尽量模拟 sh 行为# 使用 bash --posix 强制启用 POSIX 模式4. 总结与使用场景
场景推荐 Shell需严格遵循 POSIX 标准sh需要高级功能或交互式操作bash跨平台脚本sh避免依赖扩展
验证当前 Shellecho $SHELL # 显示默认 Shell
echo $0 # 显示当前运行 Shell