2

を読んlddでいて、そこから次のコードが抽出されます。

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

このワンライナーが何をしているのかはわかっていますが、エスケープ文字\が使用されている理由はわかりません。誰が私にそれを説明できますか?

4

2 に答える 2

4

シェル変数$moduleはスクリプトに補間する必要があるawkため、プログラムを一重引用符で囲むことはできません。つまり、シェルに固有の文字はすべて円記号で保護する必要があります。

作成者が希望する場合、コードは次のように記述できます。

major=$(awk -v module=$module '$2 == module { print $1 }' /proc/devices)

元のコードをテストします(最大で修正した後= ===二重の円記号が原因でエラーが発生します。これらは必要ありません。次のように、単一の円記号で十分です。

major=$(awk "\$2==\"$module\" {print \$1}" /proc/devices)
于 2012-04-13T06:45:57.763 に答える
0

このコマンドラインの作成者は、二重引用符( ")ではなく一重引用符(')を使用する必要があります。そうしないと、シェルの特殊文字を引用符で囲んで、awkコマンドに渡すことができます。

于 2012-04-13T06:28:05.960 に答える