Как поместить специальный символ новой строки в файл с помощью оператора команды и перенаправления эха?

Можно добавить модификаторы к globbing спецификаторам:

for x (*(/)) print -rl -- $x/*(No+rand[1]:r)

См. также:

print -rl -- *(N/e{'REPLY=($REPLY/*(No+rand[1]:r))'})
31
22.03.2015, 01:07
5 ответов

Какое эхо будет определено с помощью символа, является определенным реализацией. Во многих реализациях ECHO (в том числе самых современных), прошедшая строка не рассматривается для ухода за уходами по умолчанию.

С Echo, предоставленной GNU Bash (как встроенный), а некоторые другие варианты эхо, вы можете сделать что-то вроде следующего:

echo -en 'first line\nsecond line\nthird line\n' > file

Однако это действительно звучит так, как вы хотите Printf , который Более разборчиво для моего глаза, и более портативный тоже (он имеет эту функцию, определяющую posix):

printf '%s\n' 'first line' 'second line' 'third line' > file

Вы также можете рассмотреть возможность использования документа :

cat > file << 'EOF'
first line
second line
third line
EOF
-121----14415-

Вы просили использовать синтаксис с помощью команды ECHO :

echo $'first line\nsecond line\nthirdline' > foo

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

$ '...' построить Расширяется встроенные последовательности эвакуации ANSI.

31
27.01.2020, 19:37

Чтобы предоставить еще один вариант, вы можете просто нажать Enter (т.е. буквальный перевод строки):

$ echo "the rain in spain
> falls mainly on the plain" > foo

Обратите внимание, что вы не вводите > в начале второй строки. Это дополнительное приглашение оболочки, $ PS2 , , которое оболочка печатает, когда вы вводите неполную команду (например, в этом случае команду с непревзойденный символ кавычки).

2
27.01.2020, 19:37

POSIX 7 говорит, что вы не можете

http://pubs.opengroup.org/onlinepubs/9699919799/utilities/echo.html

-e не определен, а обратная косая черта определяется реализацией:

Если первым операндом является -n, или если какой-либо из операндов содержит символ <обратная косая черта>, результаты определяются реализацией.

, если у вас нет дополнительного расширения XSI.

Поэтому используйте вместо него printf : операнд формата

должен использоваться как строка формата, описанная в нотации формата файла XBD [...]

нотация формата файла :

\ n <новая строка> Переместить позицию печати в начало следующей строки.

Также имейте в виду, что Ubuntu 15.10 и большинство дистрибутивов реализуют echo как:

  • встроенный Bash: help echo
  • автономный исполняемый файл: который echo

, что может привести к некоторой путанице.

0
27.01.2020, 19:37

Вот несколько других способов создания Многострочный файл с использованием команды ECHO :

echo "first line"  >  foo
echo "second line" >> foo
echo "third line"  >> foo

, где вторые и третьи команды используют оператор перенаправления >> , который вызывает прилагаемую вывод команды (добавить) в файл (который уже должен существовать, на этот момент).

ИЛИ

(echo "first line"; echo "second line"; echo "third line") > foo

, где группируют скобки ECHO в одном подпрограмме, который выглядит и действует как любая одна программа, которая выводит несколько строк (например, LS , например).

тонкое изменение приведенного выше

{ echo "first line"; echo "second line"; echo "third line";} > foo

это незначительно более эффективно, чем второй ответ в этом Это не создает подпрограмм. Тем не менее, синтаксис немного сложнее: Обратите внимание, что у вас должно быть пространство после { и с запятой перед } .

См. Каковы операторы управления оболочками и перенаправлениями? для получения дополнительной информации.

5
27.01.2020, 19:37

Реализация определяется тем, что делает эхо с экранированиями символов. Во многих реализациях echo (в том числе и в самых современных), передаваемая строка по умолчанию вообще не проверяется на наличие экранирования.

С помощью эха, предоставляемого GNU bash (как builtin), и некоторых других вариантов эха, вы можете сделать что-то вроде следующего:

echo -en 'first line\nsecond line\nthird line\n' > file

Однако, это действительно звучит так, как будто вы хотите printf, что более разборчиво для моего глаза, и более переносимо (у него есть эта возможность, определенная POSIX):

printf '%s\n' 'first line' 'second line' 'third line' > file

Вы также можете рассмотреть возможность использования здесь документа:

cat > file << 'EOF'
first line
second line
third line
EOF
28
27.01.2020, 19:37

Теги

Похожие вопросы