BASH — использование переменной со строкой внутри строки bash sed (2 двойные кавычки)

#bash #sed

#bash #sed

Вопрос:

По некоторым причинам эта команда работает в моей telnet:

 [ -n "$server" ] amp;amp; busybox sed -i "2s/.*/$(cat /web/data/servers/usa.txt | busybox sed -n "${server}p")/" /web/data/settings.txt
  

Но когда я запускаю скрипт cgi bash, он не выдает мне правильный результат. Я уверен, что проблема в этом, но я не знаю, как это исправить:

 $(cat /web/data/servers/usa.txt | busybox sed -n "${server}p")
  

Потому что внутри есть другая строка (двойная кавычка), которая конфликтует с внешней. Пожалуйста, помогите, я новичок в этом.

Отредактировано: пример: $server=7, который получит строку в строке 7 по адресу, /web/data/servers/usa.txt которая является USA 7, затем заменит строку в строке 2 из /web/data/settings.txt . В моей telnet она выводит желаемое значение, но когда я запускаю ее в cgi-скрипте, этого не происходит. Я использую точно такой же код в обоих. У меня также есть код, который такой же, но не имеет $(...) , и он выводит правильное значение, которое я хочу.

Комментарии:

1. Какой результат вы получаете и каков ожидаемый результат?

2. пример: $server = 7 , который получит строку в строке 7, в /web/data/servers/usa.txt которой США 7 , затем заменит строку в строке 2 /web/data/settings.txt в моей telnet, выводит желаемое значение, но когда я запускаю его в cgi-скрипте, этого не происходит. Я использую точно такой же код в обоих. У меня также есть код, которого нет в моем сообщении, он такой же, как выше, но не имеет $(...) и он выводит правильное значение, которое я хочу.

3. Вам действительно нужно использовать только busybox sed -n "${server}p" < /web/data/servers/usa.txt или даже без < , в зависимости от того, какую команду вы используете (в вашем примере 1 или 2).

4. Мне просто нужно получить конкретную строку другого файла, находясь внутри строки sed. могу ли я узнать, возможно ли это? Спасибо

5. printf Не echo используйте. Мотивация: superuser.com/a/256498