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 自身范畴。 |
浙公网安备 33010602011771号