Shell和awk中常用变量

🐚 Shell 特殊参数 ($#、$@ 等)

这些是 Shell 脚本中预设的、具有特殊含义的参数,主要用于处理脚本的输入和运行状态。

变量 含义与说明 关键细节
$# 传递给脚本或函数的参数总个数。 返回一个十进制数字。
$@ 传递给脚本或函数的所有参数列表。 当被双引号包裹 ("$@") 时,每个参数都是独立的单词,这是它和 $* 的核心区别。
$* 传递给脚本或函数的所有参数。 当被双引号包裹 ("$*") 时,所有参数会被合并成一个单一的字符串,参数间以空格分隔。
$? 上一个命令的退出状态码。 通常 0 代表成功,非 0 代表失败。这是脚本中进行错误判断最常用的变量。
$$ 当前 Shell 进程的 PID。 对于 Shell 脚本,这就是脚本运行时的进程 ID。
$! 最后一个后台进程的 PID。 指最近一个被放入后台执行的命令的进程 ID。
$- 当前 Shell 的选项标志。 显示调用 Shell 时或通过 set 命令设置的选项,如 himBHs。
$0 当前脚本的名称。 如果执行时包含了路径,则会显示完整路径。
$1, $2... 位置参数,即脚本的第 1 个、第 2 个...参数。 $1 是第一个参数,$2 是第二个,依此类推。当参数超过 9 个时,需要用 ${10} 这种大括号形式来表示。

🔧 awk 内置变量 (NR 等)

NR 是文本处理工具 awk 的内置变量,并非 Shell 变量。awk 拥有一套自己的内置变量,用于高效处理文本数据。

变量 含义与说明 关键细节
NR Number of Records,当前正在处理的总行号。 处理多个文件时,行号会累计,不会重置。
FNR File Number of Records,当前文件内部的行号。 处理多个文件时,每开始一个新文件,FNR 会重置为 1,而 NR 继续累计。
NF Number of Fields,当前行的字段(列)数量。 通过 $NF 可以方便地获取当前行的最后一列内容。
FS Field Separator,输入字段的分隔符。 默认是空格或制表符,可在 BEGIN 块中修改,效果等同于 awk -F 选项。
OFS Output Field Separator,输出字段的分隔符。 默认是空格,可以修改为逗号、竖线等其他字符,用于格式化输出。
FILENAME 当前正在处理的文件名。 在同时处理多个文件时,可用于区分当前行来自哪个文件。
ARGC / ARGV 命令行参数的数量 / 参数数组。 与 Shell 的 $# 和 $@ 类似,但属于 awk 自身范畴。
posted @ 2026-10-28 16:13  哪能咋办嘛  阅读(5)  评论(0)    收藏  举报