Строковые элементы в массиве с пробелами в них разделяются? - PullRequest
0 голосов
/ 12 марта 2020

Я пытаюсь использовать элементы следующего массива для замены некоторых строк в файле:

declare -a replacements=($name, $description, $date, $keywords)

Используя условия поиска в этом массиве:

declare -a searchs=("a.name", "a.description", "a.date", "a.keywords")

Проблема в том, что некоторые переменные (например, description) содержат пробелы:

declare description = "My name is Jonah"

, что вызывает странное поведение в следующем фрагменте кода:

for ((i = 0; i < ${#searchs[@]}; i++))
do
    sed -i -e "s/${searchs[$i]}/${replacements[$i]}/g" "./${directory}/data.txt"
done

Циклы for использует каждое слово в строке в качестве замены вместо всей строки.

Есть ли способ исправить эту ошибку? Заранее спасибо!

Ответы [ 2 ]

1 голос
/ 12 марта 2020

Вам просто нужно заключить элементы в кавычки, прежде чем вставлять их в массив.

Я полагаю, что вы также НЕ можете разделять свои элементы запятой.

declare -a replacements=("$name" "$description" "$date" "$keywords")
1 голос
/ 12 марта 2020

Вы должны заключить в кавычки в объявлении массива переменные оболочки:

declare -a replacements=("$name" "$description" "$date" "$keywords")

Также обратите внимание, что в инициализации массива оболочки не должно быть запятых.

Вы можете проверить содержимое массива, используя:

declare -p replacements
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...