У меня есть файл JSON, в котором хранятся такие данные: "path/to/git/directory/location": "path/to/local/location"
. Минимальный пример файла может быть таким:
{
"${HOME}/dotfiles/.bashrc": "${HOME}/.bashrc",
"${HOME}/dotfiles/.atom/": "${HOME}/.atom/"
}
У меня есть скрипт, который систематически читает вышеуказанное JSON (называемое locations.json
) и создает массив, а затем печатает элементы массива, которые каталоги. MWE:
#!/usr/bin/env bash
unset sysarray
declare -A sysarray
while IFS=: read -r field data
do
sysarray["${field}"]="${data}"
done <<< $(sed '/^[{}]$/d;s/\s*"/"/g;s/,$//' locations.json)
for file in "${sysarray[@]}"
do
if [ -d "${file}" ]
then
echo "${file}"
fi
done
Однако этот каталог не печатается (т. Е. $ {HOME} /. Atom). Я не понимаю, почему это происходит, потому что
Я пытался создать массив вручную (т.е. не из JSON) и проверить, являются ли его элементы каталогами, и что работает отлично.
Я попытался отобразить каждый элемент в массиве во временный файл и прочитать каждую строку в файле, чтобы увидеть, был ли это продукт того, как информация хранилась в массиве, но не повезло.
Я пытался добавить | tr -d "[:blank:]" | tr -d '\"'
после использования sed
на JSON (чтобы узнать, был ли это продукт непреднамеренного пробела или кавычек), но не повезло.
Я попытался просто запустить [ -d "${HOME}/.atom/" ] && echo '.atom is a directory'
, и это работает (так что это действительно каталог). Я не уверен, что может быть причиной этого.
Помощь в этом была бы отличной!