Я хотел бы создать файл с помощью команды echo и оператора перенаправления, файл должен состоять из нескольких строк.
Я попытался включить новую строку "\ n" внутри строки:
echo "first line\nsecond line\nthirdline\n" > foo
но таким образом не создается файл с тремя строками, а файл с одной строкой и дословным содержанием строки.
Как я могу создать с помощью этой команды файл с несколькими строками?
shell
command-line
echo
newlines
Абдул Аль Хазред
источник
источник
Ответы:
Вы просили использовать некоторый синтаксис с
echo
командой:(Но подумайте и о другом ответе, который вы получили.)
В
$'...'
конструкт расширяется встроенные управляющие последовательности ANSI.источник
То, что echo делает с символьными escape-символами, определяется реализацией. Во многих реализациях echo (в том числе в большинстве современных) передаваемая строка по умолчанию вообще не проверяется на выход.
С помощью echo, предоставляемого GNU bash (как встроенного), и некоторых других вариантов echo, вы можете сделать что-то вроде следующего:
Тем не менее, это действительно звучит так, как вы хотите
printf
, что на мой взгляд более разборчиво и более переносимо (эта функция определена в POSIX):Вы также можете рассмотреть возможность использования здесь документа :
источник
echo -en 'text..'
, в то время как принятый ответ не распознал мой символ новой строки (\n
), это былоecho -en
сделано)Вот несколько других способов создания многострочного файла с помощью
echo
команды:где вторая и третья команды используют
>>
оператор перенаправления, который приводит к тому, что выходные данные команды добавляются (добавляются) к файлу (который уже должен существовать к этому моменту).Или
где круглые скобки объединяют
echo
команды в один подпроцесс, который выглядит и действует как любая отдельная программа, которая выводит несколько строк (напримерls
, например).Тонкая вариация на выше
Это немного более эффективно, чем второй ответ, поскольку он не создает подпроцесс. Тем не менее, синтаксис немного сложнее: обратите внимание, что вы должны иметь пробел после
{
и точку с запятой перед}
.См. Каковы операторы управления и перенаправления оболочки? за дополнительной информацией.
источник
Чтобы дать еще один вариант, вы можете просто нажать Enter (т.е. буквальный перевод строки):
Обратите внимание, что вы не вводите
>
в начале второй строки. Это приглашение вторичной оболочки$PS2
, которое печатает оболочка при вводе неполной команды (например, в этом случае, команда с непревзойденным символом кавычки).источник
POSIX 7 говорит, что вы не можете
http://pubs.opengroup.org/onlinepubs/9699919799/utilities/echo.html
-e
не определяется, и обратные слэши определяются реализацией:если у вас нет дополнительного расширения XSI.
Так что используйте
printf
вместо:обозначение формата файла :
Также имейте в виду, что Ubuntu 15.10 и большинство дистрибутивов реализуют
echo
как:help echo
which echo
что может привести к некоторой путанице.
источник
echo
каждой оболочке, доступной в системе, будет встроен встроенный модуль. В Ubuntu / bin / sh обычно dash, bash также поставляется по умолчанию. zsh, rc, mksh, yash, csh, tcsh, ksh93 ... будут иметь свое собственное эхо с различным поведением. Обратите внимание, чтоwhich echo
это не даст вам пути системного эха во всех оболочках.which
Первоначально (в 80-х годах) был сценарием csh только для пользователей csh (загружал псевдонимы из ~ / .cshrc) и до сих пор используется в некоторых системах.which
является встроенным в Zsh и TSCH.