Я сделал этот код awk для печати 2 имен
#! /usr/bin/awk -f
BEGIN {
for (i=0; i < ARGC; i++)
print ARGV[i]
} inventory-shipped BBS-list
я ожидаю, что результат будет
awk
inventory-shipped
BBS-list
но когда я запускаю его, сценарий все еще хочет, чтобы я что-то написал на нем для печати, хотя список, который я ожидаю напечатать, уже есть. Но когда я пишу это с терминала, как это
$ awk 'BEGIN {
for (i=0; i <ARGC; i++)
print ARGV[i]
}' inventory-shipped BBS-list
я могу распечатать ожидаемый результат.
Вы не можете помещать аргументы командной строки внутрь скрипта. Вы должны запустить его как
./scriptname inventory-shipped BBS-list
Не используйте shebang для выполнения awk из сценария оболочки, просто вызовите его:
#!/bin/env bash
awk '
BEGIN {
for (i=0; i < ARGC; i++)
print ARGV[i]
}
' inventory-shipped BBS-list
Это даст вам гораздо больше гибкости в том, как разделить параметры сценария оболочки на переменные awk и имена файлов awk или сделать что-нибудь еще, что вам нравится.
Однако этот делает стоил вам набора котировок, да? Как правило, это справедливая цена за дополнительную гибкость, но, тем не менее, это издержки.
Например, вы не можете использовать '
внутри скрипта? Да, вместо этого вы должны использовать \047
s. Согласованный!
Вы можете попробовать это
#!/usr/bin/awk -f
BEGIN {
for (i=0; i < ARGC; i++)
print ARGV[i]
}
chmod a+x script.awk
./script.awk inventory-shipped BBS-list
awk
inventory-shipped
BBS-list
имена файлов не могут быть частью скрипта. удалите
inventory-shipped
иBBS-list
из вашего скрипта и запустите его как./script.awk inventory-shipped BBS-list
.