を読んldd
でいて、そこから次のコードが抽出されます。
major=$(awk "\\$2==\"$module\" {print \\$1}" /proc/devices)
このワンライナーが何をしているのかはわかっていますが、エスケープ文字\
が使用されている理由はわかりません。誰が私にそれを説明できますか?
シェル変数$module
はスクリプトに補間する必要があるawk
ため、プログラムを一重引用符で囲むことはできません。つまり、シェルに固有の文字はすべて円記号で保護する必要があります。
作成者が希望する場合、コードは次のように記述できます。
major=$(awk -v module=$module '$2 == module { print $1 }' /proc/devices)
元のコードをテストします(最大で修正した後= =
、==
二重の円記号が原因でエラーが発生します。これらは必要ありません。次のように、単一の円記号で十分です。
major=$(awk "\$2==\"$module\" {print \$1}" /proc/devices)
このコマンドラインの作成者は、二重引用符( ")ではなく一重引用符(')を使用する必要があります。そうしないと、シェルの特殊文字を引用符で囲んで、awkコマンドに渡すことができます。