Всем доброго времени суток и других разностей.
Если вы хотите освоить оболочку Bash в Linux, macOS или другой UNIX-подобной системе, то специальные символы (например, ~, *, | и >) имеют решающее значение.

Сегодня мы расскажем какое и как с ними работать. А то давно что-то ничего не было про линуксы и терминал, да и остальные вкусности.
Поехали.
- Что такое специальные символы?
- Домашний каталог
- . текущая директория
- .. Parent Directory
- / Path Directory Separator
- # Комментарий или "обрезка строк"
- ? - как знак подстановки символа
- * - как "подстановочный" знак последовательности символов
- [] - набор символов
- ; - разделитель команд оболочки
- & - "фоновый процесс"
- < - перенаправление ввода
- > Перенаправление вывода
- | - вертикальная черта
- ! - логический оператор НЕ и оператор истории
- $ - выражения переменных
- Цитирование специальных символов
- Послесловие
Что такое специальные символы?
Существует набор символов, которые оболочка Bash обрабатывает двумя различными способами. Когда вы вводите их в оболочку, они действуют как инструкции или команды и сообщают оболочке выполнить определенную функцию. Думайте о них как об односимвольных командах.
Иногда вам просто нужно напечатать символ, и вам не нужно, чтобы он действовал как "магический". Есть способ, которым вы можете использовать символ, чтобы представлять себя, а не его специальную функцию.
Мы покажем вам, какие символы являются «специальными» или «мета-» символами, а также как вы можете использовать их функционально и буквально.
к содержанию ↑Домашний каталог
Тильда (~) является сокращением для вашего домашнего каталога. Это означает, что вам не нужно вводить полный путь к вашей домашней директории в командах. Где бы вы ни находились в файловой системе, вы можете использовать эту команду для перехода в ваш домашний каталог:
cd ~

Вы также можете использовать эту команду с относительными путями. Например, если вы находитесь в файловой системе, которая не находится в вашей домашней папке, и хотите перейти в archive каталог в вашем workкаталоге, используйте тильду, чтобы сделать это:
cd ~/work/archive

. текущая директория
Точка (.) Представляет текущий каталог. Вы увидите это в списках каталогов, если используете -a опцию (все) с ls.
ls -a

Вы также можете использовать точку в командах для представления пути к вашей текущей директории. Например, если вы хотите запустить скрипт из текущего каталога, вы бы назвали его так:
./script.sh
Это говорит Bash искать script.sh файл в текущем каталоге . Таким образом, он не будет искать каталоги в вашем пути для поиска исполняемого файла или сценария.

.. Parent Directory
Двойной период или «двойная точка» (..) представляет родительский каталог вашего текущего. Вы можете использовать это, чтобы перейти на один уровень вверх в дереве каталогов.
cd ..

Вы также можете использовать эту команду с относительными путями - например, если вы хотите подняться на один уровень вверх в дереве каталогов, а затем ввести другой каталог на этом уровне.
Вы также можете использовать эту технику для быстрого перехода к каталогу на том же уровне в дереве каталогов, что и текущий. Вы запрыгиваете на один уровень вверх, а затем обратно в другой каталог.
cd ../gc_help

/ Path Directory Separator
Вы можете использовать косую черту (/) - часто называемую косой чертой - для разделения каталогов в имени пути.
ls ~ / work / archive

Одна косая черта представляет кратчайший возможный путь к каталогу. Поскольку все в дереве каталогов Linux начинается с корневого каталога, вы можете использовать эту команду для быстрого перехода в корневой каталог:
cd /

# Комментарий или "обрезка строк"
Чаще всего вы используете хеш или знак числа (#), чтобы сообщить оболочке, что ниже следует комментарий, и он не должен на него воздействовать. Вы можете использовать его в сценариях оболочки и, - менее полезно, - в командной строке.
# This will be ignored by the Bash shell

Однако он не игнорируется, потому что он добавлен в историю команд.
Вы также можете использовать хеш, чтобы обрезать строковую переменную и удалить некоторый текст с начала. Эта команда создает строковую переменную с именем this_string.
В этом примере мы присваиваем текст «Dave Geek!» переменной.
this_string="Dave Geek!"

Эта команда использует echo для печати слова «How-To» в окне терминала. Он извлекает значение, хранящееся в строковой переменной, через расширение параметра . Поскольку мы добавляем хеш и текст «Dave», он обрезает эту часть строки перед тем, как передать её в echo.
echo How-To ${this_string#Dave}
Это не меняет значение, хранящееся в строковой переменной; это влияет только на то, что отправлено echo. Мы можем использовать echo для печати значения строковой переменной еще раз и проверить это:
echo $this_string

? - как знак подстановки символа
Оболочка Bash поддерживает три символа подстановки, одним из которых является знак вопроса (?). Вы используете "подстановочные" знаки для замены символов в шаблонах имен файлов. Имя файла, которое содержит "подстановочный" знак, формирует шаблон, который соответствует диапазону имен файлов, а не одному.
"Подстановочный" знак вопроса представляет ровно один символ. Рассмотрим следующий шаблон имени файла:
ls badge? .txt
Это переводится как: «перечислить любой файл с именем, начинающимся с «badge» и сопровождаемым любым отдельным символом перед расширением имени файла».
Это соответствует следующим файлам. Обратите внимание, что у некоторых есть цифры, а у некоторых есть буквы после части имени файла в виде значка. "Подстановочный" знак вопроса будет соответствовать как буквам, так и цифрам.

Этот шаблон имени файла не соответствует значению «badge.txt», поскольку в имени файла нет ни одного символа между «значком» и расширением файла. "Подстановочный" знак вопроса должен совпадать с соответствующим символом в имени файла.
Вы также можете использовать знак вопроса, чтобы найти все файлы с определенным количеством символов в именах файлов. Здесь перечислены все текстовые файлы, которые содержат ровно пять символов в имени файла:
ls ?????. txt

* - как "подстановочный" знак последовательности символов
Вы можете использовать "подстановочный" знак звездочка (*) для обозначения любой последовательности символов, включая отсутствие символов. Рассмотрим следующий шаблон имени файла:
ls badge*
Это соответствует всем следующим:

Он соответствует «badge.txt», потому что "подстановочный" знак представляет собой любую последовательность символов или не содержит символов.
Эта команда сопоставляет все файлы, называемые «исходными», независимо от расширения файла.
ls source.*

[] - набор символов
Как указано выше, вы используете знак вопроса для обозначения любого отдельного символа, а звездочку - для любой последовательности символов (включая символы).
Вы можете сформировать "подстановочный" знак с квадратными скобками ([]) и символами, которые они содержат. Соответствующий символ в имени файла должен соответствовать хотя бы одному из символов в наборе символов подстановки.
В этом примере команда переводит: «любой файл с» .txt», имя файла , начиная с „badge_0,“и в котором следующий символ либо 2, 4 или 6.»
ls badge_0 [246] .txt

Вы можете использовать более одного набора скобок на шаблон имени файла:
ls badge_ [01] [789] .txt

Вы также можете включить диапазоны в набор символов. Следующая команда выбирает файлы с номерами от 21 до 25 и от 31 до 35 в имени файла.
ls badge_ [23] [1-5] .txt

; - разделитель команд оболочки
В командной строке Вы можете вводить столько команд, сколько Вам нужно, если Вы разделяете каждую из них точкой с запятой (;). Мы сделаем это в следующем примере:
ls> count.txt; wc -l count.txt; rm count.txt

Обратите внимание, что вторая команда выполняется даже в случае сбоя первой, третья - даже в случае сбоя второй и тд.
Если Вы хотите остановить последовательность выполнения в случае сбоя одной команды, используйте двойной амперсанд (&&) вместо точки с запятой:
cd ./doesntexist && cp ~ / Documents / reports / *.

& - "фоновый процесс"
После того, как Вы введете команду в окне терминала и она завершится, Вы вернетесь в командную строку. Как правило, - это занимает всего минуту или две. Но если вы запустите другое приложение, например gedit, вы не сможете использовать окно терминала, пока не закроете приложение.
Однако вы можете запустить приложение как фоновый процесс и продолжать использовать окно терминала. Для этого просто добавьте амперсанд в командную строку:
gedit command_address.page &

Bash показывает идентификатор процесса, который был запущен, а затем возвращает вас в командную строку. Затем Вы можете продолжать использовать окно терминала.
к содержанию ↑< - перенаправление ввода
Многие команды Linux принимают файл в качестве параметра и берут свои данные из этого файла. Большинство из этих команд также могут принимать данные из потока. Чтобы создать поток, используйте левую угловую скобку (<), как показано в следующем примере, чтобы перенаправить файл в команду:
sort < words.txt

Когда команда перенаправляет ввод в нее, она может вести себя иначе, чем при чтении из именованного файла.
Если мы используем wc для подсчета слов, строк и символов в файле, он печатает значения, а затем имя файла. Если мы перенаправим содержимое файла wc, он печатает те же числовые значения, но не знает имени файла, из которого поступили данные. Он не может напечатать имя файла.
Вот несколько примеров того, как вы можете использовать wc:
wc words.txt
wc < words.txt

