Рассмотрим не -оболочки Bash, в которых нет строк Bash here -(<<<"..."
)или подстановок процессов (<(...)
), а также тот факт, что некоторым людям необходимо писать сценарии, демонстрирующие уровень переносимости между системами.
Здесь -документы используются всякий раз, когда многострочный -строковый предварительно -отформатированный фрагмент текста должен быть отправлен утилите, возможно, с выполнением или без выполнения подстановки переменных и т. д. в его содержимом.
В скрипте это может быть полезно для предоставления пользователю некоторого текста, например:
Во избежание утомительного
echo 'Usage:'
echo " $0 [-a|-b] file [file...]"
echo
echo 'Options:'
(Посмотрите в книге реальный пример того, как кто-то действительно делает это, и попытайтесь отследить, какие строки оцениваются, а какие нет. Это точно не пройдет проверку моего кода:https://books.google.com/books?id=0LvYSCi7QsIC&pg=PA201)
Вместо этого можно просто передать здесь -документ вcat
:
cat <<-END_USAGE
Usage:
$0 [-a|-b] file [file...]
Options:
END_USAGE
Это, кстати, также дает возможность сделать определенный объем документирования сценария путем разумного выбора здесь -документа "тэг" (END_USAGE
, END_FTP
и т.д. ).
Это также полезно для отправки готовых сценариев таким утилитам, как ftp
или другим программам, способным считывать последовательности команд со своего стандартного ввода.
Как Bash-программист,вы, очевидно, можете использовать способ работы Bash, но я действительно думаю, что здесь -документы по-прежнему обеспечивают более чистый способ отправки предварительно -отформатированного документа команде, чем использование длинной и бессвязной строки.
Удаление здесь -документов из Bash также сделало бы Bash бесполезным в качестве кандидата на /bin/sh
в большинстве систем Unix, поскольку это серьезно нарушило бы его соответствие POSIX.
Принято показывать некоторые вещи, которые вы уже пробовали. -Так вы получите больше откликов. Для этого вопроса вам нужно найти регулярные выражения и понять некоторые концепции.Я предполагаю, что "x" в ваших временных метках - это числа? Если это так, это регулярное выражение поможет вам начать:
/tmp>ls | grep -E "[0-9]{2}\-[0-9]{2}\-[0-9]{4}\-[0-9]{1}.txt$"
test-12-12-1234-9.txt
/tmp>rm $(ls | grep -E "[0-9]{2}\-[0-9]{2}\-[0-9]{4}\-[0-9]{1}.txt$")
Разбивка на части:
"
[0-9]{2} -- Exactly two numeric characters
- -- A literal dash "-"
[0-9]{2} -- Exactly two numeric characters
- -- A literal dash "-"
[0-9]{4} -- Exactly four numeric characters
- -- A literal dash "-"
[0-9] -- One numeric character
. -- Any character. Use \. to insist on a dot
txt -- The literal string "txt"
$ -- An anchor that means the txt has to be at the end of the line
"