как у меня есть кавычки внутри эха? - PullRequest
0 голосов
/ 03 мая 2020

Мне нужна помощь. Я пытаюсь сделать что-то вроде этого

echo "{
    "server":"$SERVER_HOST",
    "server_port":"$SERVER_PORT",
    "password":"$PASSWORD_CHOICE",
    "timeout":$TIMEOUT_CHOICE
}" >> /etc/ss/example.json

, и мне нужен вывод, как

{
    "server":"127.0.0.1",
    "server_port":80,
    "password":"randompassword",
    "timeout":60
}

, но вывод всегда похож на

{
    server:127.0.0.1,
    server_port:80,
    password:randompassword,
    timeout:60
}

Ответы [ 4 ]

1 голос
/ 04 мая 2020

Не используйте echo, но cat с документом здесь:

cat >> /etc/ss/example.json <<EOF
{
  "server":"$SERVER_HOST",
  "server_port":"$SERVER_PORT",
  "password":"$PASSWORD_CHOICE",
  "timeout":$TIMEOUT_CHOICE
}
EOF
0 голосов
/ 04 мая 2020

у вас есть два подхода:

  • Первый, уже отвеченный в других ответах, заключается в использовании других кавычек (если вы использовали ', то используйте " или наоборот) но обычно вы теряете возможность интерпретировать переменные оболочки, если вы используете ' извне.
  • Вторым является выход из кавычек и использование escape-символа \\ для выхода из интерпретации оболочки, как в
  • Подход, прокомментированный в некоторых ответах, с использованием escape-символа внутри кавычек, обычно дает не очень хорошие результаты (в зависимости от используемой оболочки экранирование не работает внутри одинарных кавычек или даже внутри двойных кавычек) Лучше всего выйти из кавычек, снова выйти и войти в кавычки, как показано ниже.
  • Подход с использованием cat(1) и входного перенаправления ввода с << зависит от оболочки (не все оболочки допускают это, поэтому вы должны быть осторожны)
echo "{
    "\""server"\"":"\""$SERVER_HOST"\"",
    "\""server_port"\"":"\""$SERVER_PORT"\"",
    "\""password"\"":"\""$PASSWORD_CHOICE"\"",
    "\""timeout"\"":$TIMEOUT_CHOICE
}" >> /etc/ss/example.json

вам нужно просто преобразовать каждый " внутри строки в "\"" (если вы использовали двойные кавычки, чтобы процитировать вашу строку). То же самое работает и для одинарных кавычек (если вы использовали одинарные кавычки в кавычках своей строки), конвертируя каждый ' в '\''.

0 голосов
/ 03 мая 2020

попробуйте это

 <?php

  echo ('
         "server":"127.0.0.1",
         "server_port":80,
         "password":"randompassword",
         "timeout":60
       ');
  ?>

попробуйте это новое

SHELL

echo "{
  ""\"server""\": ""\"127.0.0.1""\",
  ""\"server""\":""\"127.0.0.1""\",
  ""\"server_port""\":80,
  ""\"password""\":""\"randompassword""\",
  ""\"timeout""\":60
}"
0 голосов
/ 03 мая 2020

используйте backsla sh, чтобы поместить специальные символы, такие как \" или \n для следующей строки или \t для табуляции

echo "this is my quotes -> \" <-"

, выходной результат будет

this is my quotes -> " <-
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...