03 · 数组与注释

2026.10.08 · 🟢

目标:掌握数组的定义/读取/长度,以及三种多行注释技巧

🎯 今天要带走的三件事

  1. 数组用空格分隔元素:arr=(a b c),下标从 0 开始
  2. ${arr[@]} 取全部元素,${#arr[@]} 取元素个数
  3. 多行注释三招:# 逐行、:<<EOF、: ' ... '

一、Shell 数组

  • bash 只支持一维数组(不支持多维),大小不限
  • 下标从 0 开始,类似 C 语言
  • 下标可以是整数或算术表达式,值 ≥ 0

定义数组

# 形式 1:一行
array_name=(value0 value1 value2 value3)

# 形式 2:多行(不用逗号,用换行或空格)
array_name=(
value0
value1
value2
)

# 形式 3:逐个定义
array_name[0]=value0
array_name[1]=value1
array_name[n]=valuen

下标可以不连续,范围无限制。

读取数组

# 读取单个元素
valuen=${array_name[n]}
echo ${array_name[n]}

# 读取所有元素(用 @ 或 *)
echo ${array_name[@]}

获取数组长度

length=${#array_name[@]}    # 元素个数
length=${#array_name[*]}    # 同上

length=${#array_name[n]}    # 第 n 个元素的字符长度

生活比喻

Shell 数组像停车位:车位编号从 0 开始,你可以跳着编号停车(0、3、7 号位都停车),系统不管你空着的位。


二、Shell 注释

单行注释

# 以 # 开头,解释器会忽略

多行注释的三种方式

方式 1:逐行加 #(最笨但最通用)

#--------------------------------------------
# 这是一个注释
# author:菜鸟教程
#--------------------------------------------

方式 2:Here Document 格式 ⭐

:<<EOF
注释内容...
注释内容...
注释内容...
EOF

原理:: 是一个空命令,<<'EOF' 开启 Here 文档,中间内容被视为注释。 ⚠️ 结束标记 EOF 必须顶格写,前后不能有任何字符(包括空格和 tab)。

EOF 可替换成任意符号:

: <<'COMMENT'
这是注释。
COMMENT

:<<!
注释内容...
!

方式 3:冒号 + 单引号

: '
这是注释的部分。
可以有多行内容。
'

💡 还有一个骚操作:把大段代码用 {} 包成一个未被调用的函数,也能达到「注释掉」的效果。


🌙 今日作业

  • [ ] 定义一个 5 元素的数组,打印全部元素和元素个数
  • [ ] 用 :<<EOF 方式给一段代码加多行注释

自测题

  1. arr=(a b c),echo ${#arr[@]} 输出什么?echo ${arr[1]} 呢?
  2. 多行注释时 EOF 前面加了个空格会怎样?
  3. Shell 数组支持多维吗?
👉 参考答案 1. 分别输出 `3` 和 `b`(下标从 0 开始)。 2. 会失效 —— 结束 delimiter 必须顶格,否则会被当成注释内容的一部分,一直吞到文件结尾。 3. 不支持。bash 只支持一维数组(可用关联数组模拟键值)。多维需拼接字符串或用 awk 等工具。

🔗 关联

Shell-学习总览|上一课 → 02-变量与字符串|下一课 → 04-传递参数