Как протестировать, если функция определяется в awk?

Я отправил некоторые предложения для книг здесь:

Рекомендуемое чтение для лучше понимания внутренностей Unix/Linux

Что касается разработки на Linux с.NET, я настоятельно рекомендую установить MonoDevelop IDE.

4
23.08.2011, 16:31
2 ответа

Я могу предложить, чтобы взлом определил, работаете ли Вы mawk или gawk.Вот

BEGIN {
  file = ARGV[0] " -W version 2>&1 | head -1"
  file | getline
  if ($1 == "mawk")
    print "mawk"
  else if ($2 == "Awk")
    print "gawk"
  close(file)
}
2
27.01.2020, 20:56

Нет никакого портативного способа протестировать, если функция существует в Awk. При вызове сценария Awk от оболочки можно выполнить вызовы Awk для тестирования на существование функций сначала.

if awk 'BEGIN {asort(a)}' <>/dev/null 2>/dev/null; then
  define_asort=
else
  define_asort='
function asort() { … }
'
fi
awk "$define_asort"'
  … rest of script …
'

Если Вы только пытаетесь отличить GNU Awk от других, можно протестировать на некоторой другой функции GNU Awk. При вызове неопределенные функции вызывают фатальную ошибку в Awk, но использование неопределенной переменной всегда прекрасно и возвращает пустое значение. Можно в особенности использовать PROCINFO[version], который начиная с Простофили 3.1.4 содержит номер версии Простофили.

function my_sort(a) { … }
function sort_wrapper(a) { if (PROCINFO["version"]) asort(a); else my_sort(a); }
2
27.01.2020, 20:56

Теги

Похожие вопросы