Как создать файл с несколькими строками из командной строки?

Как создать файл с несколькими строками из командной строки?

Как ввести в файл следующее содержимое:

Hi
abcd

Я пробовал использовать echo "Hi\nabcd" >> ab.txt, но в файле он записан как есть ( \nвключен вместо новой строки)

решение1

Вам нужно сказать, echoчтобы соблюдать последовательности побегов.

echo -e "Hi\nabcd" >> ab.txt

решение2

Поведениеechoварьируется от раковины к раковине¹;printfповедение более стандартно.

printf "Hi\nabcd" >> ab.txt

¹ «Невозможно использоватьэхопереносимо на все системы POSIX, если только оба(как первый аргумент) и управляющие последовательности опущены."

решение3

Я бы предложил использоватьФункция оболочки bash называетсяЗдесь Документ. Кажется, это самая элегантная форма для достижения того, что вы описываете. Самое главное, что многострочное содержимое выглядит точно так же, как оно выглядит в выходном файле (в отличие от нечитаемых, длинных, \nразделенных строк).

cat > ab.txt <<EOL
Hi
abcd
EOL

Вот EOLмаркер, который указывает, какую оболочку следует искать, чтобы найти конецздесь документ. Вы можете произвольно выбрать слово, которое позволит вам выбрать что-то, что не будет случайно конфликтовать сздесь документсамо содержимое. Хорошая вещь, что вы можете иметь оболочку, ${VARIABLES}которая будет заменена. Если это каким-то образом нежелательно, вы всегда можете обернуть открывающее (только открывающее!) слово-маркер кавычками ( '), чтобы предотвратить это.

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

cat > ~/.screenrc <<END_OF_HEREDOC_MARKER
defscrollback ${MAX_LINES}
END_OF_HEREDOC_MARKER

решение4

Вы также можете поиграть в игры с цитированием:

 % echo 'Hi
> abcd' >> ab.txt

Вы вводите это в bash, нажимая "Enter" после "Hi". Bash использует '>' как продолжение командной строки для меня. Я не мог избежать индивидуального возврата с помощью обратной косой черты по какой-то причине.

Связанный контент