Проблема не в том, что $
является частью синтаксиса RE;это то, что /
является разделителем RE.Если вы просто ищете c9d0s3
, то использование правильного цитирования поможет:
$ DISK=c9d0s3
$ awk "/$DISK/ {print}" output
600144f029bf0a0000004e0484740053 53694562304 /dev/rdsk/c9d0s3
Объяснение: если вы используете ""
вместо ''
, тогда переменная оболочки будет расширена до передачи программы на awk
, поэтому awk
будет видеть
/c9d0s3/ {print}
в качестве своей программы.Вы все еще можете искать шаблон с /
в нем, но это требует некоторой магии цитирования оболочки:
$ DISK=/dev/rdsk/c9d0s3
$ awk "{if (match(\$0, \"$DISK\")) print}" output
600144f029bf0a0000004e0484740053 53694562304 /dev/rdsk/c9d0s3
И нет, awk
не порождает подоболочку.С чего бы это?И зачем вам передавать переменную, если вы можете просто сделать это через среду?