Показать параметры ядра, переданные в init [дубликат]

eval declare -A USERARRAY=(
    $(awk -F: '{ printf "[\"%s\"]=\"%s\"\n", $1, $6}' /usrmkr/in.out)
)

Скрипт awk производит вывод в формате [key]=val, который требуется при установке нескольких элементов ассоциативного массива bash, и заключает в двойные кавычки и ключ, и значение (["key"]="value") в случае наличия пробелов, табуляций и т.д. в ключах или значениях.

Я использовал \n в качестве разделителя, чтобы упростить задачу на случай, если вы захотите обработать вывод awk другим инструментом (хотя awk может делать большинство вещей, которые вы, в любом случае, захотите сделать с помощью других инструментов).

Замена команд должна быть достаточной сама по себе... но из-за ошибки в bash, которая, IMO, является ошибкой, если первый не пробельный символ внутри определения массива ( ... ) не является [], он просто выдает сообщение об ошибке must use subscript when assigning associative array.

например, обе следующие попытки установить USERARRAY будут неудачными:

$ bash --version | head -1
GNU bash, version 4.3.46(1)-release (x86_64-pc-linux-gnu)

$ declare -A USERARRAY=($(awk -F: '{ printf "[\"%s\"]=\"%s\"\n", $1, $6}' /usrmkr/in.out))
bash: USERARRAY: $(awk -F: '{ printf "[\"%s\"]=\"%s\"\n", $1, $6}' /usrmkr/in.out): must use subscript when assigning associative array

$ UA=$(awk -F: '{ printf "[\"%s\"]=\"%s\"\n", $1, $6}' /usrmkr/in.out)
$ declare -A USERARRAY=( $UA )
bash: USERARRAY: $UA: must use subscript when assigning associative array

Решением является использование eval при объявлении хэшированного массива, как в примере кода в верхней части моего ответа. Или,

eval declare -A USERARRY=( $UA )
86
12.02.2018, 12:22
0 ответов

Теги

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