2016-11-01 2 views
0

У меня есть структура JSON, экранированная внутри другой структуры JSON, которая скрывается внутри другой структуры JSON.Куда девались мои обратные слэши?

cat показывает содержимое файла просто отлично:

cat test.json 
{ 
    "payload": "{\"data\":\"{\\\"nested\\\":1}\"}" 
} 

Я хочу присвоить это переменной в zsh.

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

X="$(cat test.json)" 
echo "$X" 
{ 
    "payload": "{\"data\":\"{\\"nested\\":1}\"}" 
} 

echo $(cat test.json) 
{ "payload": "{\"data\":\"{\\"nested\\":1}\"}" } 

echo $(<test.json) 
{ "payload": "{\"data\":\"{\\"nested\\":1}\"}" } 

Куда девались мои обратные косые черты? Могу ли я вернуть их?

Я использую zsh 5.2 (x86_64-apple-darwin16.0).

+1

какая версия bash вы используете? Я не могу воспроизвести вашу проблему на bash-4.3.46 (ArchLinux) – agg3l

+0

А, ладно; похоже, проблема заключалась в том, что я использовал 'zsh'. Я уточню вопрос. – Birchlabs

ответ

1

Переменная устанавливается в правильное значение. Вы используете dash, а не bash, или ваша bash оболочка имеет набор xpg_echo. zsh встроенный echo, однако, ведет себя согласно спецификации POSIX, которая заменяет некоторые экранированные символы. Попробуйте вместо этого использовать printf:

$ printf '%s\n' "$X" 
{ 
    "payload": "{\"data\":\"{\\\"nested\\\":1}\"}" 
} 
Смежные вопросы