LINUX.ORG.RU

Куда исчезает второй пробел?

 ,


1

1

Вот баш скрипт

#!/bin/bash

declare -A test1=( a "b  b" )
echo "${test1["a"]}"

eval declare -A test2=( $(echo "a \"b  b\"") )
echo "${test2["a"]}"

который выдаёт в результате

b  b
b b

Не могу понять, почему исчезает пробел во втором случае, и как это предотвратить.


Баш и пробелы - это одна большая сказка о боли, страдании и смирении. Используй другой инструмент.

Когда от баша не уйти и надо передавать параметры с пробелами, кавычками и переводами строк - передаю упакованное base64. Иначе потом всю жизнь костыли подсовывать придётся

pinus_nigra ()
Последнее исправление: pinus_nigra (всего исправлений: 1)
Ответ на: комментарий от JaM

Вместо echo внутри парсер командной строки на key-value пары. Как-то так

declare -A pars
while read index value; do
A["$index"]=$value
done < <(keyvalue_parser "$@")

Всё намного понятнее для последующих правок, разбора и безопаснее.

Но если keyvalue_parser функция данного скрипта, то вообще всё упрощается.

vodz ★★★★★ ()
Ответ на: комментарий от JaM

на перл в 2021? мсьё знает толк в некромантии.

anonymous ()
Ответ на: комментарий от JaM
$ bb --eval '(apply hash-map *command-line-args*)' a b c d

{"a" "b", "c" "d"}

как бы и всё, зачем в гамаке плясать?

anonymous ()
Для того чтобы оставить комментарий войдите или зарегистрируйтесь.