Ответ 1
Квадратные скобки создают выражение glob, соответствующее любому одному символу внутри них.
[123]
соответствует файлу с именем 1
, 2
или 3
; аналогично, [{"date":"2016"}]
соответствует файлам с именами d
, a
, t
, e
, :
, 2
, 0
, 1
, 6
, "
, {
или }
.
Вы не замечаете это для пользователей, у которых нет имени файла, так как поведение по умолчанию выражения glob без совпадений не оценивается для себя (хотя это значение по умолчанию может быть изменено с помощью shopt -s nullglob
, в котором case glob без совпадений ничего не дает).
Процитировать расширение - echo "$json"
- чтобы избежать этого.
Воспроизведение:
json='[{"date":"2016"}]'
owd=$PWD
tempdir=$(mktemp -d "${TMPDIR:-/tmp}/test.XXXXXX")
cd "$tempdir" && {
touch 1
echo "With the bug: " $json
echo "Without the bug: " "$json"
}
# cleanup
cd "$owd"
rm -rf "$tempdir"