LINUX.ORG.RU

escape string

 


0

1

Внезапно понял, что не знаю как экранировать всю строку, чтоб присутствующие в ней команды, если таковые есть не выполнялись.

Абстрактно, есть цикл, while read line,

${line} может содержать смешанные данные, текст, или к примеру такой кусок:

qweqwe $(ls -la) 123123

Собственно вопрос, как оперировать строкой как есть, без выполнения наличествующих команд, в тривиальных задачах вроде:

echo "${line}" >> file
sed 's/qwe/text/g' "${line}"

★☆

Последнее исправление: Umberto (всего исправлений: 2)

Ответ на: комментарий от anonymous

cat file

text
123 $(ls -la) 123
qwe qwe

test.sh

execvar="123 $(ls -la) 123"
echo "${execvar}"

while read line
do
  echo "${line}"
done <file

кажется, опять упоролся, в цикле работает правильно, меня чего-то переклинило, что echo «${line}» будет непременно выполнять команду из строки.

Umberto ★☆
() автор топика
Ответ на: комментарий от irton

спасибо, кэп, но суть в том, что в цикле команда из второй строки файла не выполняется, а обрабатывается как текст.

Umberto ★☆
() автор топика

Чето совсем плохо парсить ваш текст.

line='qweqwe $(ls -la) 123123'
echo "${line}" >> file
sed 's/qwe/text/g' file #>> texttext $(ls -la) 123123 
это вы хотели?

st4l1k ★★
()
Ответ на: комментарий от anonymous

Классно, но лишне. Все в памяти - это быстро и хорошо

minakov ★★★★★
()
Ответ на: комментарий от minakov

естественно, не всяким скриптом терабайты данных обрабатывать.

st4l1k ★★
()
Ответ на: На, смотри от Deleted

не, я об этом.

echo '${a}'

вобщем тема решена, изначально всё правильно было, просто я упоролся

Umberto ★☆
() автор топика

А проверить, перед тем как задавать вопрос?

# export line='qweqwe $(ls -la) 123123'
# echo "${line}" >> file
# cat file
qweqwe $(ls -la) 123123
anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.