Можно добавить модификаторы к globbing спецификаторам:
for x (*(/)) print -rl -- $x/*(No+rand[1]:r)
См. также:
print -rl -- *(N/e{'REPLY=($REPLY/*(No+rand[1]:r))'})
Какое эхо будет определено с помощью символа, является определенным реализацией. Во многих реализациях 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.
Чтобы предоставить еще один вариант, вы можете просто нажать Enter (т.е. буквальный перевод строки):
$ echo "the rain in spain
> falls mainly on the plain" > foo
Обратите внимание, что вы не вводите >
в начале второй строки.
Это дополнительное приглашение оболочки, $ PS2
,
, которое оболочка печатает, когда вы вводите неполную команду
(например, в этом случае команду с непревзойденный символ кавычки).
POSIX 7 говорит, что вы не можете
http://pubs.opengroup.org/onlinepubs/9699919799/utilities/echo.html
-e
не определен, а обратная косая черта определяется реализацией:
Если первым операндом является -n, или если какой-либо из операндов содержит символ <обратная косая черта>, результаты определяются реализацией.
, если у вас нет дополнительного расширения XSI.
Поэтому используйте вместо него printf
: операнд формата
должен использоваться как строка формата, описанная в нотации формата файла XBD [...]
\ n <новая строка> Переместить позицию печати в начало следующей строки.
Также имейте в виду, что Ubuntu 15.10 и большинство дистрибутивов реализуют echo
как:
help echo
который echo
, что может привести к некоторой путанице.
Вот несколько других способов создания Многострочный файл с использованием команды 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
это незначительно более эффективно, чем второй ответ в этом
Это не создает подпрограмм. Тем не менее, синтаксис немного сложнее:
Обратите внимание, что у вас должно быть пространство после {
и с запятой перед }
.
См. Каковы операторы управления оболочками и перенаправлениями? для получения дополнительной информации.
Реализация определяется тем, что делает эхо с экранированиями символов. Во многих реализациях 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