Неопределенная команда `s'- запускает sed из сценария.sh, чтобы заменить строку, содержащую"="

Я действительно борюсь с очень глупой, но сложной проблемой во время работы sed из .sh сценарий, чтобы заменить строку, которая включает в себя =,

Моя команда, sed -i 's/^host=.*/host=myhost1/' /opt/file.txt работает очень хорошо, пока я выполняю из терминала.

Тем не менее, хотя я пытаюсь эту команду CMD из файла.sh, он показывает мне ошибку, как показано ниже:

CMD="sed -i 's/^host=.*/host=myhost1/' /opt/file.txt"

Я получаю ошибку:

sed: -e expression #1, char 7: unterminated `s' command

Глядя на ошибку, я мог найти это проблема с = в строке поиска / замены. Я пытался избежать этого и многих других вариантов, но не смог добиться успеха. Даже когда я удаляю = из строк, он хорошо работает и из.sh.

1 ответ

Когда вы печатаете CMD="sed -i 's/^host=.*/host=myhost1/' /opt/file.txt", ты используешь " (двойные кавычки), запрашивая оболочку интерпретировать специальные символы, такие как *,

Это заменит .* со списком всех файлов в текущем каталоге, которые начинаются с .запутывая sed,

Сделать * необычный с обратной косой чертой \*, Также к echo "$CMD" чтобы увидеть имена файлов.

Другие вопросы по тегам