Почему строки JSON преобразуются с помощью оболочки bash - PullRequest
0 голосов
/ 15 декабря 2018

У меня есть это:

$ export foo=["foo","zoom"]
$ echo $foo
[foo,zoom]
$ export foo='["foo","zoom"]'
$ echo $foo
["foo","zoom"]

почему символы "(двойные кавычки) удаляются, если я не заключаю в одинарные кавычки?

1 Ответ

0 голосов
/ 15 декабря 2018

Учтите это:

$ echo "foo"
foo

Мы заметили, что в этой строке нет кавычек.Из руководства по bash :

Заключение символов в двойные кавычки ('' ') сохраняет буквальное значение всех символов в кавычках, за исключением' $ ','`',' \ ',

Таким образом, двойные кавычки являются синтаксисом bash. Чтобы получить буквальные двойные кавычки, нам нужно их избежать:

$ echo \"foo\"
"foo"

Еще один вариант экранирования - использоватьодинарные кавычки (снова из руководства по bash):

Заключение символов в одинарные кавычки ('' ') сохраняет буквальное значение каждого символа в кавычках.

Итакэто эквивалентно приведенной выше команде:

$ echo '"foo"'
"foo"

Применительно к вашему конкретному примеру мы можем видеть это:

$ export foo=["foo","zoom"]
$ declare -p foo
declare -- foo="[foo,zoom]"

Двойные кавычки анализируются.

Но с

$ export foo='["foo","zoom"]'
$ declare -p foo
declare -x foo="[\"foo\",\"zoom\"]"

Одинарные кавычки имеют тот же эффект, что и экранирование двойных кавычек.

...