Как передать "-L" в сценарий awk? - PullRequest
0 голосов
/ 13 ноября 2018

Я пытаюсь написать сценарий awk, который принимает -L в качестве аргумента.

В качестве примера, чтобы показать вам, что я хочу, вот простой сценарий awk под названием awktest:

#!/usr/bin/awk -f 
BEGIN 
{
   print ARGV[1]
}

Если я запускаю это из оболочки:

$./awktest -w

Я получаю в качестве вывода:

-w

Это то, что я ожидаю.Кажется, это работает для всего, что я вставил в , кроме -L.

Если я запустил:

$./awktest -L

Я получу:

awk: option requires an argument --L

Когда я ожидаю, что ARGV [1] будет просто содержать -L.Что здесь происходит?Почему он не работает в этом конкретном случае и как я могу заставить его принять -L в ARGV?Спасибо

1 Ответ

0 голосов
/ 13 ноября 2018

Оберните ваш awk-скрипт в сценарий оболочки:

#!/bin/sh
awk 'BEGIN {
      print ARGV[1]
     }' "$@"

Пример:

$ ./awktest -L
-L

Проблема в том, что при запуске сценария со строкой shebang запускается указанная программас именем скрипта и аргументами скрипта в качестве дополнительных аргументов командной строки.Другими словами, с вашим оригинальным сценарием awktest выполнение awktest -L превращается в /usr/bin/awk -f /path/to/awktest -L, поэтому awk рассматривает -L как аргумент для него, а не для фактического сценария.

Если вы неЕсли вы не хотите использовать синтаксис ./awktest -- -L, вам нужен еще один уровень косвенности, чтобы поместить аргументы сценария туда, где они должны быть.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...