Как я могу передать переменную из awk в bash? Я хочу передать много переменных, поэтому я не использую:
x=$(awk '.....)
Я думаю, это бесполезно.
Предполагая, что вы доверяете входящим данным, которые обрабатывает awk.
Вы можете сделать так, чтобы awk распечатывал объявления переменных оболочки и source
из вывода awk, как будто это файл оболочки:
source <(
awk '
# ....
print "var1=" value1
print "var2=" value2
# ....
' input
)
echo "shell var1 = $var1"
echo "shell var2 = $var2"
Это общая проблема, которая уже появилась во многих вариантах на StackExchange, например,
Ответ всегда заключается в том, что процесс не может изменить среду своего родителя (и это то, чего вы пытаетесь достичь, когда просите awk
задать переменную среды в оболочке, которая его породила).
Как правило, рекомендуемое решение состоит в том, чтобы получить исходные данные, как показал Глен. Вы должны доверять программе, хотя. Вы в основном выполняете произвольный код.
Другое, немного отличающееся, решение - вывести строки var=value
в именованный файл и вместо него создать исходный файл. (Sourcing в основном выполняет содержимое файла в текущей оболочке, как если бы вы его набрали; см. Http://ss64.com/bash/source.html.) Преимущество этого подхода заключается в том, что вы можете проверить содержимое этот файл перед поиском.