Неопределенная команда `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"
чтобы увидеть имена файлов.