Как бы вы включили символы новой строки в команду echo для C-shell? - PullRequest
3 голосов
/ 02 апреля 2012

Это звучит до смешного легко, как и в случае с другими оболочками. Но я не могу понять, как получить эхо для отображения новых строк. Например -

cat myFile

показывает файл в том виде, в каком он существует на самом деле, чего я и хочу -

this
is
my
file

тогда как мой скрипт, который содержит следующее -

#!/bin/csh
set var = `cat myFile`
echo "$var"

удаляет все новые строки, а это не то, что я хочу -

this is my file

Заранее спасибо.

Ответы [ 2 ]

6 голосов
/ 02 апреля 2012

Проблема не в команде echo, а в том, что csh обрабатывает обратные пометки. Когда вы выполните

set var = `cat myFile`

переводы строк с myfile никогда не сохраняются в $var; они преобразованы в пробелы. Я не могу придумать, как заставить переменную csh включать переводы строки, прочитанные из файла, хотя может быть способ сделать это.

sh и его производные ведут себя так, как вы хотите. Например:

$ x="`printf 'foo\nbar'`"
$ echo $x
foo bar
$ echo "$x"
foo
bar
$ 

Двойные кавычки в присваивании приводят к сохранению символов новой строки (кроме последней). echo $x заменяет символы новой строки пробелами, но echo "$x" сохраняет их.

Лучше всего делать что-то кроме попыток сохранить содержимое файла в переменной. В комментарии вы сказали, что пытаетесь отправить электронное письмо с содержимым файла журнала. Поэтому передайте содержимое файла непосредственно любой почтовой команде, которую вы используете. У меня нет всех деталей, но это может выглядеть примерно так:

( echo this ; echo that ; echo the-other ; cat myFile ) | some-mail-command

Обязательный указатель: http://www.faqs.org/faqs/unix-faq/shell/csh-whynot/

1 голос
/ 14 апреля 2012

Вы можете использовать Awk для разделения каждой строки с помощью '\ n', прежде чем оболочка соединит их вместе.

set var = `cat myfile | awk '{printf("%s\\n", $0)'}`

Если ваша команда echo будет интерпретировать "\ n" как символ новой строки, echo ${var} должен воспроизвести cat myfile без необходимости дополнительного доступа к файлу. Если код новой строки не распознан, вы можете попробовать добавить флаг -e в echo и / или использовать /bin/echo.

.
...