Конец строки в переменных оболочки - PullRequest
1 голос
/ 03 августа 2011

Итак, у меня есть testfile, который содержит

Line one
Another line
and this is the third line

Мой скрипт читает этот файл, делает некоторые вещи, и я получаю переменную, которая должна содержать его.Что-то вроде

filevar=$(cat testfile)

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

Я буду использовать содержимое этой переменной для генерации HTML-кода и одногоя должен добавить <br> в конец каждой строки.Проблема в том, что в моем var нет никаких EOL:

echo $filevar
Line one Another line and this is the third line

Как правильно прочитать файл, чтобы сохранить EOL?Как только я получу это, я могу просто sed s/$/<br>/g, но до тех пор ...

спасибо!

Ответы [ 4 ]

4 голосов
/ 03 августа 2011

как насчет смены IFS?

#!/bin/bash

IFS=""
filevar=$(cat test)
echo $filevar

это выдаст:

Line one
Another line
and this is the third line
1 голос
/ 04 августа 2011

Вместо того, чтобы делать echo $filevar делать echo "$filevar" (обратите внимание на двойные кавычки).Это отправит один аргумент в echo, а затем вы можете передать его в sed.

С sed это будет рассматриваться как 3 строки, поэтому вам не нужна опция g.Это работает со мной (Bash и Cygwin):

echo "$filevar" | sed 's/$/<br>/'
1 голос
/ 03 августа 2011

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

sed 's|$|<br/>|' testfile 

ОБНОВЛЕНИЕ:

Если вы действительно хотите вернуть EOL в вашу переменную.Попробуйте это (обратите внимание на кавычки):

echo "$filevar"

Но я все еще не могу понять, почему вы можете cat файл, но не получить доступ к файлу

В качестве решения я бы предложил следующий скрипт:

while read LINE
do
  echo ${LINE} '<br />'   # Implement your core logic here.
done < testfile
1 голос
/ 03 августа 2011

Необходимо установить переменную IFS, содержащую только новую строку, а затем сослаться на переменную filevar без кавычек.

$ filevar='Line one
Another line
and this is the third line'

$ for word in $filevar; do echo "$word<br>"; done
Line<br>
one<br>
Another<br>
line<br>
and<br>
this<br>
is<br>
the<br>
third<br>
line<br>

$ for word in "$filevar"; do echo "$word<br>"; done
Line one
Another line
and this is the third line<br>

$ (IFS=$'\n'; for word in $filevar; do echo "$word<br>"; done)
Line one<br>
Another line<br>
and this is the third line<br>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...