Я отправил некоторые предложения для книг здесь:
Рекомендуемое чтение для лучше понимания внутренностей Unix/Linux
Что касается разработки на Linux с.NET, я настоятельно рекомендую установить MonoDevelop IDE.
Я могу предложить, чтобы взлом определил, работаете ли Вы 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)
}
Нет никакого портативного способа протестировать, если функция существует в 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); }