Как я могу передать переменную из awk в bash? Я хочу передать много переменных, поэтому я не использую:

x=$(awk '.....)

Я думаю, это бесполезно.

2 ответа2

1

Предполагая, что вы доверяете входящим данным, которые обрабатывает awk.

Вы можете сделать так, чтобы awk распечатывал объявления переменных оболочки и source из вывода awk, как будто это файл оболочки:

source <(
    awk '
        # ....
        print "var1=" value1
        print "var2=" value2
        # ....
    ' input
)
echo "shell var1 = $var1"
echo "shell var2 = $var2"
0

Это общая проблема, которая уже появилась во многих вариантах на StackExchange, например,

Ответ всегда заключается в том, что процесс не может изменить среду своего родителя (и это то, чего вы пытаетесь достичь, когда просите awk задать переменную среды в оболочке, которая его породила).

Как правило, рекомендуемое решение состоит в том, чтобы получить исходные данные, как показал Глен. Вы должны доверять программе, хотя. Вы в основном выполняете произвольный код.

Другое, немного отличающееся, решение - вывести строки var=value в именованный файл и вместо него создать исходный файл. (Sourcing в основном выполняет содержимое файла в текущей оболочке, как если бы вы его набрали; см. Http://ss64.com/bash/source.html.) Преимущество этого подхода заключается в том, что вы можете проверить содержимое этот файл перед поиском.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .