Appearance
基础与数据结构
- 状态:已验证
- 来源:对话整理
- 更新时间:2026-03-12
关键结论
- Bash 基础写法应优先掌握脚本头、严格模式、变量、参数展开、命令替换和字符串处理。
- 数据结构部分以数组和关联数组为主,关联数组仅 Bash 支持。
详细分析
- 速查手册的重点不是解释概念,而是让人能快速找到写法,因此基础部分应覆盖最常用语法块。
- 与普通总结文档相比,速查手册更适合按语法主题组织示例,例如参数、测试表达式、数组和函数。
可执行步骤
- 编写脚本前先确认是否使用 Bash。
- 从本文件中复制最接近的基础示例。
- 优先保留双引号和严格模式写法。
- 修改示例中的变量名、路径和命令后再使用。
命令 / 配置 / 代码
基础
高频写法清单:
#!/usr/bin/env bashset -euo pipefailname="value""$1""$#""$@"$(command)${var:-default}
脚本头与严格模式
#!/usr/bin/env bash指定使用 Bash 解释器执行脚本。set -e任意命令返回非零退出码时立即退出脚本。set -u使用未定义变量时报错。set -o pipefail管道中任一命令失败时,整条管道视为失败。set -euo pipefail常用严格模式组合。
bash
#!/usr/bin/env bash
set -euo pipefail注释
# comment单行注释。
bash
# 单行注释变量
name="alice"字符串赋值。age=18数值或普通变量赋值。readonly root_dir="/tmp/demo"只读变量。unset name删除变量。"$name"安全展开变量,推荐默认使用。"${name}"显式变量边界。"${name:-default}"变量未设置或为空时使用默认值,不修改原变量。"${name:=default}"变量未设置或为空时赋默认值,并修改原变量。"${name:+exists}"变量已设置时返回替代值。"${name:?error}"变量为空或未定义时直接报错退出。
bash
name="alice"
age=18
readonly root_dir="/tmp/demo"
unset namebash
echo "$age"
echo "${age}"
echo "${name:-default}"
echo "${name:=default}"
echo "${name:+exists}"
echo "${name:?name is required}"命令行参数
"$0"脚本自身名称。"$1","$2"第 1、第 2 个位置参数。"$#"参数个数。"$*"所有参数,通常不推荐直接遍历。"$@"所有参数,保留参数边界,遍历参数时推荐使用。
bash
echo "$0"
echo "$1"
echo "$2"
echo "$#"
echo "$*"
echo "$@"bash
for arg in "$@"; do
echo "$arg"
done命令替换与算术
"$(command)"命令替换,获取命令输出。$((1 + 2))算术运算。$((count + 1))自增等数值表达式。
bash
now="$(date +%F-%H%M%S)"
sum=$((1 + 2))
count=$((count + 1))字符串处理
"${file%.txt}"从右侧删除最短匹配后缀。"${file%%.txt}"从右侧删除最长匹配后缀。"${file#demo}"从左侧删除最短匹配前缀。"${file##demo}"从左侧删除最长匹配前缀。"${file/txt/md}"替换首个匹配字符串。"${file//txt/md}"替换全部匹配字符串。"${#file}"获取字符串长度。
bash
file="demo.txt"
echo "${file%.txt}"
echo "${file#demo}"
echo "${file/txt/md}"
echo "${#file}"数据结构
高频写法清单:
arr=("a" "b")"${arr[@]}""${#arr[@]}"declare -A map"${!map[@]}"
数组
arr=("a" "b" "c")创建数组。"${arr[0]}"访问指定元素。"${arr[@]}"获取全部元素。"${#arr[@]}"获取数组长度。arr+=("d")追加元素。unset 'arr[1]'删除指定元素。
bash
arr=("a" "b" "c")
echo "${arr[0]}"
echo "${arr[@]}"
echo "${#arr[@]}"
arr+=("d")
unset 'arr[1]'bash
for item in "${arr[@]}"; do
echo "$item"
done关联数组
declare -A map定义关联数组,仅 Bash 支持。map["key"]="value"按字符串键赋值。"${map["key"]}"读取指定键的值。"${!map[@]}"获取全部键。"${map[@]}"获取全部值。
bash
declare -A map
map["name"]="alice"
map["role"]="admin"
echo "${map["name"]}"
echo "${!map[@]}"
echo "${map[@]}"风险与注意事项
- 变量赋值不能写成
a = 1。 - 路径、参数和变量通常都应加双引号。
- 遍历参数优先使用
"$@",不要随意用未加引号的$*。 - 关联数组依赖 Bash,不适用于通用
/bin/sh。