这个shell脚本行与awk的含义

use*_*625 6 bash shell awk

我在书籍[linux device drivers]中阅读了这一行脚本.任何人都可以帮助解释它的作用(可能只是几个字)?

major=$(awk "\\$2=  =\"$module\" {print \\$1}" /proc/devices)
Run Code Online (Sandbox Code Playgroud)

在上下文中:

#!/bin/sh
module="scull"   
device="scull"  
mode="664"

# invoke insmod with all arguments we got  
# and use a pathname, as newer modutils don't look in . by default

/sbin/insmod ./$module.ko $* || exit 1


# remove stale nodes  
rm -f /dev/${device}[0-3]   

major=$(awk "\\$2=  =\"$module\" {print \\$1}" /proc/devices)

mknod /dev/${device}0 c $major 0
....
Run Code Online (Sandbox Code Playgroud)

Gur*_*uru 8

写这个的更好方法是:

major=$(awk -v mod=$module '$2==mod{print $1}' /proc/devices)
Run Code Online (Sandbox Code Playgroud)


Viv*_*vek 2

我也读过这篇文章,但那条线对我不起作用。我必须将其修改为

major=$(awk "\$2 == \"$module\" {print \$1}" /proc/devices)
Run Code Online (Sandbox Code Playgroud)

第一部分\$2 == \"$module\"是模式。当满足这一点时,即第二列等于“scull”,则print \$1执行打印第一列的命令。该值存储在变量major 中。需要$转义,因为它们需要像 awk 一样传递。