Я пытаюсь создать команду awk
, которая сохраняет весь файл конфигурации в виде переменных.
Файл конфигурации имеет следующую форму (в ключах никогда не бывает пробелов, но могут быть значения):
key=value
key2=value two
И моя команда awk:
$(awk -F= '{printf "declare %s=\"%s\"\n", $1, $2}' $file)
Выполнение этого без внешней подоболочки $(...)
приводит к печати именно тех команд, которые я хочу, поэтому мой вопрос не столько о awk, сколько о том, как я могу запускать вывод awk в виде команд.
Команда оценивается как:
declare 'key="value"'
что является некоторой проблемой, поскольку тогда двойные кавычки сохраняются со значением. Еще хуже, когда вводится пробел, что приводит к:
declare 'key2="value' two"
Конечно, я не могу удалить кавычки или значения, состоящие из нескольких слов, вызывают проблемы.
Я перепробовал почти все решения, которые смог найти, такие как set -f
, eval
и system()
.
eval $(echo k=value two | awk -F= '{printf "declare %s=\"%s\"\n", $1, $2}')
, а затемecho $k
, он вернет мнеvalue two
. Это не работает для вас? - person jas   schedule 09.06.2017