在ldd3的一个创建节点的shell脚本中,用到了awk文本处理工具,在这里做一下解释。
原句:major=$(awk "\\$2==\"$module\" {print \\$1}"/proc/devices)
Module变量在脚本中定义为 scull.
/proc/devices是awk要处理的输入文件。
$2,$1,分别代表输入文件中的每条记录的第二个域和第一个域,域之间的分隔符默认是空格。
式中的那几个斜杠是什么意思?
在awk中,\是转义字符,就是让其后面的元字符显示本意(而不是shell赋予它们的意义)。这样,\\$2就变成了\$2,\",就是"。
为什么是\$2?
在shell中,$后面跟变量,如果直接是$2,就代表调用shell脚本时传入的第二个参数,而不是上面我们谈到的含义,这就是要加 \ 的原因,它要求$2原封不动传给awk,不然就被shell替换为输入参数了。
这句话的意思是从输入文件/proc/devices检查记录,若第二个域是scull,则打印记录的第一个域,也就是设备的主设备号,并将这个值赋给了major。
awk的执行动作的部分是放在单引号内的,但是上面的语句是将动作放在双引号内,什么原因?
这是因为命令已经传给awk了,引号已经没了。 shell里面这个引号是为了阻止print{}里的内容作为shell的命令块处理