Что такое символ экранирования linux

Глава 5. Кавычки

Кавычки, ограничивающие строки с обеих сторон, служат для предотвращения интерпретации специальных символов, которые могут находиться в строке. (Символ называется «специальным», если он несет дополнительную смысловую нагрузку, например символ шаблона — * .)

Некоторые программы и утилиты могут вызываться с дополнительными параметрами, содержащими специальными символы, поэтому очень важно предотвратить интерпретацию передаваемых параметров командной оболочкой, позволяя сделать это вызываемой программой.

Примечательно, что «не окавыченный» вариант команды grep [Пп]ервая *.txt будет правильно исполняться в Bash, но не в tcsh.

Вообще, желательно использовать двойные кавычки ( » » ) при обращении к переменным. Это предотвратит интерпретацию специальных символов, которые могут содержаться в именах переменных, за исключением $ , ` (обратная кавычка) и \ (escape — обратный слэш). [1] То, что символ $ попал в разряд исключений, позволяет выполнять обращение к переменным внутри строк, ограниченных двойными кавычками ( «$variable»), т.е. выполнять подстановку значений переменных (см. Пример 4-1, выше).

Двойные кавычки могут быть использованы для предотвращения разбиения строки на слова. [2] Заключение строки в кавычки приводит к тому, что она передается как один аргумент, даже если она содержит пробельные символы — разделители.

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

Пример 5-1. Вывод «причудливых» переменных

Одиночные кавычки ( ‘ ‘ ) схожи по своему действию с двойными кавычками, только не допускают обращение к переменным, поскольку специальный символ «$» внутри одинарных кавычек воспринимается как обычный символ. Внутри одиночных кавычек, любой специальный символ, за исключением ‘ , интерпретируется как простой символ. Одиночные кавычки ( «строгие, или полные кавычки» ) следует рассматривать как более строгий вариант чем двойные кавычки ( «нестрогие, или неполные кавычки» ).

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

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

С отдельными командами и утилитами, такими как echo и sed, экранирующий символ может применяться для получения обратного эффекта — когда обычные символы при экранировании приобретают специальное значение.

Специальное назначение некоторых экранированных символов

используемых совместно с echo и sed \n

Источник

Фундаментальные основы Linux. Часть III. Раскрытие команд командной оболочкой

Глава 11. Операторы управления

В данной главе мы будем учиться размещать более одной команды в командной строке, используя для этого операторы управления . Также мы кратко обсудим связанные с этими операторами параметры ($?) и вопросы использования аналогичных операторам специальных символов (&).

Точка с запятой (;)

Амперсанд (&)

Технические подробности выполняющихся при использовании рассматриваемого оператора операций приведены в разделе, посвященном процессам .

Символ доллара со знаком вопроса ($?)

Двойной амперсанд (&&)

Двойная вертикальная черта (||)

Комбинирование операторов && и ||

Знак фунта (#)

Экранирование специальных символов (\)

Обратный слэш в конце строки

Практическое задание: операторы управления

0. Ответ на каждый из вопросов может быть представлен с помощью единственной строки команды!

1. Какой бинарный файл исполняется при вводе команды passwd ?

2. Какого типа данный файл?

3. Выполните команду pwd два раза. (Помните о пункте 0.)

4. Выполните команду ls после команды cd /etc , но только в том случае, если исполнение команды cd /etc завершилось без ошибок.

5. Выполните команду cd /etc после команды cd etc , но только в том случае, если исполнение команды cd etc завершилось ошибкой.

6. Выведите строку «сработало» в случае успешного завершения исполнения команды touch test42 или строку «не сработало» в случае неудачного завершения. Все операторы должны находиться в одной строке и исполняться с привилегиями обычного пользователя (не пользователя root). Протестируйте полученную команду в вашей домашней директории и директории /bin/ .

7. Выполните команду sleep 6 ; для чего предназначена эта команда?

8. Выполните команду sleep 200 в фоновом режиме (без ожидая завершения ее исполнения).

9. Создайте строку команды, в рамках которой будет исполняться команда rm file55 . Ваша строка команды должна выводить строку ‘удалось’ в том случае, если файл file55 был удален и строку ‘не удалось’ в случае возникновения проблем.

10 (необязательное задание). Используйте команду echo для вывода строки «Hello World со странными’ символами \ * [ >

\\ .» (включая все кавычки).

Корректная процедура выполнения практического задания: операторы управления

0. Ответ на каждый из вопросов может быть представлен с помощью единственной строки команды!

1. Какой бинарный файл исполняется при вводе команды passwd ?

2. Какого типа данный файл?

3. Выполните команду pwd два раза. (Помните о пункте 0.)

4. Выполните команду ls после команды cd /etc , но только в том случае, если исполнение команды cd /etc завершилось без ошибок.

5. Выполните команду cd /etc после команды cd etc , но только в том случае, если исполнение команды cd etc завершилось ошибкой.

6. Выведите строку «сработало» в случае успешного завершения исполнения команды touch test42 или строку «не сработало» в случае неудачного завершения. Все операторы должны находиться в одной строке и исполняться с привилегиями обычного пользователя (не пользователя root). Протестируйте полученную команду в вашей домашней директории и директории /bin/ .

7. Выполните команду sleep 6 ; для чего предназначена эта команда?

Осуществляется ожидание в течение 6 секунд

8. Выполните команду sleep 200 в фоновом режиме (без ожидая завершения ее исполнения).

9. Создайте строку команды, в рамках которой будет исполняться команда rm file55 . Ваша строка команды должна выводить строку ‘удалось’ в том случае, если файл file55 был удален и строку ‘не удалось’ в случае возникновения проблем.

10 (необязательное задание). Используйте команду echo для вывода строки «Hello World со странными’ символами \ * [ >

Источник

Экранирование в ОС Linux

Перед запуском введенной команды интерпретатор анализирует ее на наличие так называемых метасимволов, т. е. символов, имеющих специальное значение.

Так, например, пробел отделяет аргументы команды друг от друга, шаблонные выражения на основе ?, *, и [] вычисляются в имена файлов, доллар $ активирует подстановку команд, параметров или арифметических выражений, а символы , | — перенаправления потоков.

В определенных командах требуется использовать литеральное (буквальное) значение метасимволов, как, например, в листинге ниже для манипулирования файлами, в именах которых содержатся пробелы. Для отмены специального значения метасимволов используется их экранирование при помощи конструкций \m, ‘m1m2m3….mn или «m1m2m3….mn« «отменяющих» метасимволы m, m1, …,mn.

Экранирование пробельных символов

[email protected]:/usr/share/onboard/themes$ ls -l

-rw-r—r— 1 root root 2637 февр. 16 2012 Classic Onboard.colors

-rw-r—r— 1 root root 436 февр. 16 2012 Classic Onboard.there

[email protected]:/usr/share/onboard/theres$ file Classic Onboard.colors

Classic: ERROR: cannot open ‘Classic’ (No such file or directory)

Onboard.colors: ERROR: cannot open ‘ Onboard.colors’ (No such file or directory)

[email protected]:/usr/share/onboard/theres$ file Classic\ Onboard.colors

Classic Onboard.colors: XML document text

[email protected]:/usr/share/onboard/thenes$ file «Classic Onboard.colors”

Classic Onboard.colors: XML document text

[email protected]:/usr/share/onboard/theres$ file ‘Classic Onboard.colors’

Classic Onboard.colors: XML document text

В примере из листинга выше показано экранирование символа пробела в имени файла, который привел к разбиению имени файла на два аргумента команды file, ни один из которых естественно не является именем какого-либо файла. В примере используется одиночное экранирование пробела при помощи \m, а далее — множественное экранирование всех символов в кавычках » и включая пробел.

В менее тривиальных случаях, как в примере из листинга ниже, попытка выполнения команды find с вполне валидными аргументами приводит к неожиданным и странным результатам.

В режиме трассировки команд интерпретатора становится очевидно, что шаблонное выражение *.gz, предназначавшееся самой команде поиска файлов, было подставлено интерпретатором до запуска команды, что привело ее в недоумение.

Для правильной передачи шаблонных выражений самим командам их следует экранировать.

Экранирование шаблонных выражений

$ find . -name *.gz

find: все пути должны предшествовать выражению: plan9.iso.gz

Использование: find [-Н] [-L] [-Р] [-Оуровень] [-D help|tree|search|stat|rates|opt|exec]

$ set -x

$ find . -name *.gz

+ find . -name dvd.iso.gz plan9.i5o.gz

find: все пути должны предшествовать выражению: plan9.iso.gz

Использование: find [-H] [-L] [-P] [-Оуровень] [-D help|tree|search|stat|rates|opt|ехес]

$ find . -name «*.gz «

Аналогично, в примере из листинганиже при попытке скачивания с Web-сервера ресурса со сложным W:[URL] при помощи команды wget командный интерпретатор постарался разбить команду на список заданий, встретив метасимвол &, формирующий асинхронные задания.

Для правильной передачи строк, содержащих метасимволы, их следует экранировать, как в примере.

Экранирование символов списка команд &

$ wget https: //r4- — -sn-xjpm-4g5e. googlevideo. com/videoplayback?signature=D017 06B19078430C4AB2E7E0E8A1C03A685Q48F5.53412B263BA6F90E9DBlADD7F175E6AB4F7F18A3&expire=14511669 72&pl=24&nv=u&nt=1451145210&nis=au&id=o-ANXmoZGwlgBo02QKDOnA9iQcFzRyI8UhFWlgl5Wll8c&nn=sn-xjp n-4g5eSm=31&key=yt6&ipbits=0&rnne=video%2Fnp4&source=ycHitube&sver=3&du r=5104.2108itag=188fex p=9407536%2C9412913%2C9413141%2C9416126%2C9416984%2C9417206%2C9418203%2C9418777%2C9420452%2C9 420540%2C9421665%2C9422596%2C9423662%2C9424114%2C9424629%2C9424845%2C9425448%2C9425953%2C9426 410%2C9426494&ratebypass=yes&lnt=1394506818301594&ip=185.53.168.70&requiressl=yes&sparans=dur %2Cid%2Cip%2Cipbits%2Citag%2ClntVOTlne%2Crri%2Crin%2Qns%2Cnv%2Cpl%2Cratebypass%2Crequiress’lX2C sou rce%2Cupn%2Cexpire&upn=tkA065sWc j 8&title=%OO%A4%DO%B8%DO%BB%Dl%8C%DO%BOo20%DO%8E%20GNU/Lin ux%20Revolutlon%20OS%2O[RU] -0 revolution-os.mp4
[1] 5215

—2018-12-26 19:00:05— https://r4—sn-xjpm-
4g5e. googlevideo. com/videoplayback?signature=D01706B19078430C4AB2E7E0E8AlC03A685048F5.53412B2 638A6F90E9OB1ADD7F175E6AB4F7F18A3

[23] 5237
[2] Готово expire=1451166972

Распознаётся r4—sn-xjpm-4g5e.googlevideo.com .(r4—sn-xjpm-‘%j5e.googlevideo.com)…
Подключение к r4—sn-xjpn-4g5e.googlevideo.com (r4—sn-xjpm-4g5e.googlevideo. com) 1194.122.81.151:443… соединение установлено.

HTTP-запрос отправлен. Ожидание ответа… 403 Forbidden

2018-12-26 19:00:05 ОШИБКА 403: Forbidden.

$ wget ‘https://r4—sn-xjppi-4g5e.googlevideo.com/videoplayback7signaturesOQi 706B19078430C4AB2E7E0E8A1C03A685O48F5.53412B263BA6F90E9DBlADO7F175E6AB4F7F18A3&explre=1451l66 972&pl=24env=u&nt=1451145210&ns=au&id=o-ANXnoZQwigBoC32QKD0nA9iQcFzRyI8UhFWlgl5Nll8c8nn=sn-xj
pn-4g5e&m=31&key=yt6&ipbits=0&nine=video%2Fnp4&sourcG=youtube&sver=3&dur=5104.210&itag=l8&fe
хр=94О7536%2С9412913%2С9413141Уо2С941612б%2С9416984%2С94172Об%2С9418203%2С9418777%2С942О452%2С 942054O%2C9421665%2C9422596%2C9423662%2C9424114%2C9424629%2C9424845%2C9425448%2C9425953%2C942 6410%2C9426494&ratebypass=yes&lnt=1394506818301594&ip=185.53.168.70&requiressl=yes&sparans=du r%2Cid%2Cip%2Cipbits%2Citag%2Clnt5i2Cnine%2Cpn%2Cnn%2Cns%2Cnv%2Cpl%2Cratebypass%2Crequiresslyo2 Csource%2Cupn%2Cexpire&upn=tkAO65sWcj8&title=%D0%A4%DO%B8%O0%BB%01%8C%DO%BC%2O%D0%BE%20GNU/Li nux%20Revolution%20OS9620[RU] -0 linux-revolution-os.mp4’ -0 revolution-os.mp4

Распознаётся r4—sn-n8v7zn76.googlevideo.com (…)… 74.125.13.211, 2a00:1450:4011:1a::13
Подключение к r4—sn-n8v7zn76.googlevideo.com (…)|74.125.13.211|:443… соединение установлено.
HTTP-запрос отправлен. Ожидание ответа… 200 OK

Длина: 260800224 (249М)
Сохранение в: «revolution-os.mр4»
100%[==================================================== —>]
260 800 224 2,85M/s за 86s
2018-12-26 19:19:23 (2,91 MB/s) — «revolution-os.mp4» сохранён [260800224/260800224]

В листингах ниже использованы разные способы множественного экранирования » и ‘ ‘ хотя в этих примерах между ними нет разницы.

Экранирование метасимволов в двойных кавычках » « носит название слабого экранирования, потому что не распространяется на метасимволы подстановки $ и ´ ´и метасимвол одиночного экранирования \.

Экранирование метасимволов в одинарных кавычках « носит название сильного экранирования, потому как распространяется на абсолютно любые метасимволы.

Источник

Служебные символы

Служебные символы используемые в shell скриптах

Если данный символ экранирован или заключен в одинарные или двойные кавычки, он будет выступать в роли обычного символа. Кроме того он может быть использован в операциях подстановки параметров и в константных числовых выражениях.

Экранируется символ #, символом \.

Кроме вышеописанных ситуаций, символ # не интерпретируется как начало комментария в операциях поиска по шаблону.
; — Разделитель команд ( точка с запятой ) Позволяет записывать более одной команды в строке.

выведет следующие результаты:

\ — Escape ( обратный слэш ) Используется для экранирования отдельных служебных символов в строке. По эффекту действия данный символ аналогичен одинарным кавычкам:

При использовании в арифметических операциях, означает — деление.
` — Подстановка команд ( обратные кавычки ) Могут используются для присвоения переменной, результатов выражения системной команды. Скрипт:

: — Пустая операция ( двоеточие ) Является аналогом операции «NOP» ( нет операции ). Данную команду можно считать эквивалентом встроенной команды true. Как и true, команда двоеточие, всегда возвращает 0 ( ноль ), то есть значение истина ( true ).

Практически все команды в операционных системах unix, возвращают «0» в случае успешного завершения работы.

Возможны следующие варианты использования.
Бесконечный цикл:

Символ заполнитель в условном операторе if/then.

Символ заполнитель в операциях, предполагающих наличие двух операндов.

Символ заполнитель в конструкциях вложенный документ.

В операциях с подстановкой параметров.

В операциях замены подстроки с подстановкой переменных.

В сочетании с операторами перенаправления вывода

При использовании с оператором >, обнуляет содержимое файла, если файла не существует, он создается:

В сочетании с оператором >> перенаправление с добавлением в конец файла и изменением времени последнего доступа.

При задании имени не существующего файла, он будет создан, аналогично вышеописанному варианту или действию команды touch.

Два предыдущих варианта неприменимы к символическим ссылкам, конвейерам и другим специальным файлам.

Кроме перечисленного, символ двоеточие можно использовать для создания комментариев, но это не рекомендуется, поскольку при использовании символа #, интерпретатор не проверяет данную строку на предмет ошибок, при использовании двоеточия это не так:

Так-же символ двоеточие используется в качестве разделителя полей в файле /etc/passwd и переменной окружения $PATH.

! — Логическое отрицание в условных операторах Символ восклицательный знак используется для инвертирования кода возврата операции к которой он применяется. Так-же применяется для логического отрицания в операциях сравнения:

Восклицательный знак является зарезервированным словом оболочки bash.

В некоторых случаях может быть использован для косвенного обращения к переменным.

При использовании из командной строки оболочки, запускает механизм работы с историей команд, из сценариев данная возможность не доступна.
* — Символ группового шаблона ( звездочка ) Используется в качестве шаблона для постановки в имени файла. В случае использования одиночного символа шаблона, означает совпадение с любым именем файла.

В следующем варианте выведет файлы с любым именем, но только с расширением tar

В регулярном выражении, означает 0 или больше, любых символов.

В арифметических операциях знак * — означает умножение, а в варианте ** — возведение в степень.
? — Проверка условия В некоторых случаях используется для проверки выполнения условия.

При использовании в конструкциях с двойными скобками, ведет себя как тернарный оператор языка C ( и многих других языков ).

При использовании в выражениях с подстановкой параметров, проверяет установлено-ли значение переменной.

Кроме того используется как символ шаблон. При подстановке к имени файла и в регулярных выражениях, означает одиночный символ.
$ — Подстановка переменной

Установка символа $ перед именем переменной, означает что будет получено значение данной переменной.

В регулярных выражениях, означает конец строки.
$<> — Подстановка переменной Выполняет то-же действие, что и предыдущий вариант, но в некоторых случаях при возникновении неоднозначности интерпретации, будет работать только этот вариант. Кроме того может быть использован для конкатенации строковых переменных в одну строку.

$*, $@ — Аргументы командной строки Переменная $* содержит все параметры командной строки в виде строки.

Переменная $@ тоже содержит все параметры командной строки, но строку из себя представляет каждый параметр, то есть они не интерпретируются.
$? — Код завершения операции Данная переменная получает код, возвращаемый последней выполненной командой, функцией или сценарием. $$ — PID процесса Переменная содержит process id текущего сценария. () — Группа команд Команды размещенные в скобках, выполняются в дочернем процессе ( subshell ). При этом переменные, определяемые в дочернем процессе, не видны в родительском.

Другой вариант использования конструкции с одинарными скобками, инициализация массивов.

и выводит найденные варианты

Использовать в фигурных скобках пробелы можно, либо заключив их в одинарные или двойные кавычки, либо экранировав их с помощью символа \.

<> — Блок кода ( вложенный блок ) По сути такая конструкция создает анонимную функцию. В отличии от традиционно создаваемых функций, переменные вложенного блока, доступны всему сценарию.

Конструкция заключенная в фигурные скобки, может создавать перенаправление ввода/вывода.

Перенаправление ввода/вывода из вложенного блока:

в результате выполнения этого сценария, будут выведены две первые строки файла /etc/fstab

Сохранить результат работы вложенного блока в файл

В отличии от конструкций с обычными одинарными скобками, выполняющимися в дочернем процессе, вложенные блоки в фигурных скобках, выполняются в рамках того-же процесса, что и сам сценарий.

Обратите внимание что символ точка с запятой, завершающий опцию —ezec, команды find, должен быть экранирован, что-бы избежать его интерпретации.

При работе с массивами, в квадратных скобках указывается индекс элемента к которому нужно обратиться.

Нумерация элементов массива начинается с 0 ( ноль ), поэтому в элементе с индексом 1, находится символ b .

При использовании в регулярных выражения, в квадратных скобках, пишутся так называемые классы символов или диапазоны.

[xyz] — соответствует любому из этих трех символов
9 — соответствует любому числовому символу от 0 до 9
[a-zA-Z] — соответствует любой, прописной или строчной букве, английского алфавита
[[]] — Двойные квадратные скобки Это расширенный вариант конструкция с одинарными квадратными скобками, в двойных квадратных скобках также проверяется истинность, заключенного в данную конструкцию, выражения, но этот вариант более предпочтителен, поскольку позволяет избежать некоторых логических ошибок. Например в конструкции с двойными квадратными скобками, допустимо использовать операторы &&, ||, , в то время как в одинарных скобках они приведут к ошибке.

При использовании с условным оператором if, наличие квадратных скобок, как одинарных так и двойных, не обязательно.

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

Операторы перенаправления позволяют передать вывод из файла, сценария, команды или блока команд на ввод другого файла, сценария, команды. Например:

Операция подстановки процесса, передает вывод одного процесса на ввод другого.

между символами и круглой скобкой не должно быть пробела.

Кроме того символы используются в операциях сравнения символов и целых чисел.
Встроенный документ, специальный вид перенаправления, позволяющий передать интерактивной команде или программе, список команд. Например, сценарий с выводом многострочного текста с помощью программы cat, может выглядеть так:

на выходе получим следующее:

Символ-ограничитель, в нашем примере End-of-message, не должен повторяться в теле самого встроенного документа.
— Посимвольное ASCII-сравнение Сравниваются ASCII коды символов

Обратите внимание, при использовании операций сравнения в одинарных квадратных скобках, символы больше и меньше, необходимо экранировать обратным слэшем
\ — Граница слова Данные символы используются для обозначения границ слова в регулярных выражениях, например в операциях поиска.

| — Конвейер Конвейер ( канал, pipe ), это классический способ межпроцессного взаимодействия, stdout одного процесса, передается на stdin другого. Часто используется для связывания нескольких команд между собой. Одна команда, передает результат обработки данных через конвейер на ввод другой команды. Например, вывод команды ps ( process status — список процессов ), передается на ввод команде grep ( поиск по шаблону ), которая в свою очередь, сделав выборку, выводит результат в stdout.

или еще пример, команда cat выводит содержимое файла на вход команды wc, которая посчитает количество строк и выведет результат.

В конвейеры можно объединять как команды, так и сценарии. Например, перенаправим вывод команды ls на вход сценария, преобразующего символы в верхний регистр:

Все символы, вывода команды ls, будет преобразован в верхний регистр.

Stdout каждого процесса в конвейере, должен читаться в stdin другого процесса, иначе конвейер оборвется:

Конвейер выполняется в отдельном процессе, поэтому не может получить доступ к переменным сценария.

Если какая-то из команд конвейера завершается аварийно, весь конвейер аварийно завершает работу.
>| — Принудительное перенаправление Перенаправление происходит даже если bash, используется с ключом -C ( noclobber ).
|| — Логическое ИЛИ В операциях сравнения, ||, возвращает значение true, если хотя-бы одно условие возвращает true:

этот небольшой сценарий выведет true, поскольку второе условие вернет true, то и вся проверка вернет true.

Вышеприведенное условие можно записать в следующей форме:

Оператор ||, не может использоваться в одинарных квадратных скобках.

При использовании в сценариях, в фоновом режиме можно выполнять не только команды, но и циклы, например так:

Обратите внимание, команда, запущенная из сценария в фоновом режиме, может съесть вывод фоновой команды. Например, следующий сценарий:

выведет такой результат:

как видите, результат выполнения команды ls, отсутствует.
Что-бы исправить поведение сценария, достаточно использовать оператор wait, который приостанавливает выполнение сценария, до тех пока, пока не будут завершены все фоновые задания. Приводим сценарий к следующему виду:

теперь мы получим ожидаемый вывод:

&& — Логическое И В условных операциях, &&, возвращает true только в том случае, если ОБА операнда имеют значение true.
Формат использования аналогичен оператору || ( логическое ИЛИ ).

Для многих команд наличие дефиса перед ключами опция не обязательно, например у команды ps, тем не менее бывают ситуации когда его использование необходимо, что-бы опции интерпретировались именно как опции а не как их значения.

Перенаправление из/в stdin или stdout

Пример перемещения дерева каталогов и файлов с помощью архиватора tar:

что делает данный сценарий

  • cd ./ss — перейти в каталог, расположенный в текущем каталоге, содержимое которого будем переносить
  • && — все последующие команды будут выполнены только после выполнения перехода в исходный каталог
  • tar cf — . -ключ c говорит архиватору tar создать новый архив, ключ f( file ) с последующим задается файл архива — stdout, в архив помещается текущий каталог ( . ) со всем содержимым.
  • | ( . ) — конвейер в дочерний процесс
  • cd ./test — Перейти в каталог назначения
  • && — как и выше
  • tar xpvf — — распаковать tar архив ( ключ x ), сохранить принадлежность и права доступа к файлам ( ключ p ), выдавая подробные данные во время выполнения ( ключ v ), файл архива stdin ( ключ f с последующим )

Еще один пример:

В таком контексте ( дефис ), скорее не отдельный оператор bash, а опция, распознаваемая Unix утилитами ( tar, cat и т.д. ), выводящими результаты в stdout.

Если предполагается имя файла, , перенаправляет вывод в stdout или принимает ввод с stdin.

При запуске программы file без параметров, будет выдано сообщение об ошибке:

если передать в качестве параметра ( дефис ), file будет ожидать пользовательского ввода:

как видите, программа file проанализировала стандартный поток ввода stdin и определила тип его содержимого.

Передача stdout по конвейеру на вход других команд, позволяет выполнять различные трюки, например, вставка строки в начало файла:

на выходе получаем файл text.txt.new, содержащий все предыдущие данные, плюс первую строку «this is first line».

Теперь более полный пример использования архиватора tar с символом . Небольшой скрипт для архивирования файлов, подвергшихся изменениям в течение последних суток:

Оператор перенаправления может конфликтовать с именами файлов, начинающихся с дефиса -filename, что-бы этого избежать, в сценариях необходимо проверять имена файлов и предварять их префиксом пути, например: ./-filename или $PWD/-filename.
Кроме того не забывайте о значениях переменных, простой пример:

этот сценарий ничего не выведет, поскольку итоговая команда получится echo -n, то есть значение переменной, «-n», будет интерпретировано как опция команды echo, просто подавляющая вывод символов новой строки.

При использовании с командой cd, производит переход в предыдущий рабочий каталог.

В арифметических выражениях, означает операцию вычитания.

Не забывайте, интерпретация символа ( дефис ), зависит от контекста, в котором вы его используете.

или как знак равенства в операциях сравнения.
+ — Плюс В зависимости от контекста использования, оператор сложения в арифметических операциях или квантификатор в регулярном выражении.
В регулярных выражениях означает, одно или несколько совпадений предыдущего символа.
% — Модуль В зависимости от контекста использования, остаток от деления в арифметических операциях или выступает в качестве шаблона.

В шаблонах, удаляет из переменной большую или меньшую подстроку, совпадающую с шаблоном. Поиск ведется с конца строки.

— Домашний каталог ( тильда ) Соответствует переменной окружения $HOME, содержащей путь к домашнему каталогу текущего пользователя.

+ — Текущий рабочий каталог Соответствует переменной окружения $PWD, содержащей имя текущего рабочего каталога.

— — Предыдущий рабочий каталог Соответствует переменной окружения $OLDPWD, содержащей имя предыдущего рабочего каталога. ^ — Начало строки При использовании в регулярных выражениях, обозначает начало строки текста.

Управляющий символ

В качестве управляющего символа, управляет выводом текста или поведением терминала. Набирается на клавиатуре как сочетание Ctrl+клавиша.

Ctrl+C — Прервать выполнение процесса.
Ctrl+D — Выход из системной оболочки, аналог команды exit или EOF— конец файла, так-же выступает завершающим символом при вводе с stdin.
Ctrl+G — BEL, звуковой сигнал.
Ctrl+H — Backspace, удалить предыдущий символ.
Ctrl+J — Возврат каретки.
Ctrl+L — Аналог команды clear, очистка окна терминала.
Ctrl+M — Перевод строки.
Ctrl+U — Очистить строку ввода.
Ctrl+X — Приостановить выполнение процесса.
Символ пробела Пробелом считается сам символ пробела, символ табуляции, перевод строки, возврат каретки или комбинация из перечисленных символов. Используется как разделитель команд и переменных.
Поскольку bash довольно привередлив в отношении пробелов, есть строгие ограничения на использование пробельных символов в операциях присвоения значений переменным. Например:

Пустые строки никак не интерпретируются, их можно свободно использовать, например для визуального выделения строк или блоков сценария.

Переменная $IFS содержит разделитель полей, используемый некоторыми программами, по-молчанию, пробел.

Источник

Читайте также:  Средства программирования для windows
Оцените статью