Журнал LinuxFormat - перейти на главную

LXF133:DrBrown2

Материал из Linuxformat
Перейти к: навигация, поиск

Со­еди­ним точ­ки

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

LXF133 53 1.jpg Взгля­ни­те на раз­ные точ­ки. Это Times New Roman, жир­ный кур­сив Arial и гра­фи­че­ский сим­вол. Все — кег­лем 144.

LXF133 53 2.jpg В APL бы­ло столько спец­сим­во­лов, что по­на­до­би­лась на­клад­ка на клавиа­ту­ру.

В таб­ли­це ASCII все­го 32 пе­чат­ных сим­во­ла, ко­то­рые не явля­ют­ся ни бу­к­ва­ми, ни циф­ра­ми. Это­го яв­но ма­ло для такой бо­га­той на син­так­сис сис­те­мы, как Linux, и мно­гие из них ра­бо­та­ют по со­вмес­ти­тель­ст­ву, при­об­ре­тая зна­че­ние в за­ви­си­мо­сти от кон­тек­ста, в ко­то­ром они ис­поль­зу­ют­ся. Это и де­ла­ет ра­бо­ту в ко­манд­ной стро­ке столь за­бав­ной.

У точ­ки (на­зо­вем ее Точ­ка) осо­бен­но раз­но­об­раз­ная жизнь, и я ре­шил ри­ск­нуть и рас­спро­сить ее об этом. Сна­ча­ла я встре­тил точ­ку в обыч­ной ко­ман­де cp:

$ cp /etc/fstab .

«Я: – При­вет, Точ­ка. Ты что здесь де­ла­ешь?

Точ­ка: – Да вот оз­на­чаю те­ку­щий ка­та­лог.

Я: – О, так ты спец­сим­вол обо­лоч­ки?

Точ­ка (сму­тив­шись): – Во­об­ще-то нет. Я про­сто точ­ка. Но в каж­дом ка­та­ло­ге есть ссыл­ка на те­ку­щий ка­та­лог, под на­зва­ни­ем ., и . как имя фай­ла оз­на­ча­ет те­ку­щий ка­та­лог.»

В сле­дую­щей ко­ман­де, ко­то­рая мне по­па­лась, то­чек бы­ло пол­но:

$ . ../ .bashrc

Я ре­шил рас­спро­сить их по оче­ре­ди.

«Я: – При­вет, пер­вая Точ­ка. Мне тут дру­гая точ­ка все про те­бя расска­за­ла. Ты – ссыл­ка на те­ку­щий ка­та­лог, вер­но?

Точ­ка: – Не го­во­ри глу­по­стей. Я мог­ла бы быть ею, будь я аргумен­том. А так я ко­ман­да. Точ­нее, псев­до­ним для ис­ход­ной ко­ман­ды.

Я: – И что ты де­ла­ешь?

Точ­ка: – За­став­ляю обо­лоч­ку вы­пол­нить ко­ман­ды из фай­ла. А са­ма я – встро­ен­ная.»

Две — луч­ше, чем од­на

Под­хо­жу к сле­дую­щей па­ре то­чек – близ­не­цы, что ли?

«Я: – При­вет, Точ­ки. Вы ча­сом не осо­бые?

Точ­ки: – Нет, мы оз­на­ча­ем “под­нять­ся на один уро­вень вверх в де­ре­ве ка­та­ло­гов”.

Я: – А раз­ве это не де­ла­ет вас осо­бы­ми?

Точ­ки: – Нет, ссыл­ка .. есть в ка­ж­дом ка­та­ло­ге, она ука­зы­ва­ет на ро­ди­тель­ский ка­та­лог.

Я пе­ре­шел к точ­ке но­мер 4.

Я: – При­вет, Точ­ка 4. Ну ты-то осо­бая?

Точ­ка: – Нет, я часть име­ни фай­ла. Де­лаю файл не­ви­ди­мым. (Накло­ня­ет­ся и шеп­чет мне на ухо.) Но ни­ко­му не го­во­ри. Толь­ко ls зна­ет.»

Но­вую точ­ку я встре­тил по­се­ре­ди име­ни фай­ла:

$ gimp sunset.jpg

«Я: – При­вет, Точ­ка. Ты осо­бая или нет?

Точ­ка: – Смот­ря ко­го спро­сить. Ес­ли фай­ло­вую сис­те­му и яд­ро, то нет. Но ути­ли­ты ра­бо­че­го сто­ла по­ни­ма­ют кон­цеп­цию рас­ши­рений фай­лов, и для них я от­де­ляю имя фай­ла от рас­ши­ре­ния.»

Итак, яв­ля­ет­ся ли точ­ка осо­бым сим­во­лом или нет, за­ви­сит не толь­ко от то­го, где она на­хо­дит­ся, но и от то­го, у ко­го вы спраши­вае­те. Я на­чи­нал пу­тать­ся. Сле­дую­щую точ­ку я встре­тил в самой гу­ще ко­ман­ды:

grep ‘sshd.*failure’ /var/log/auth.log

«Я: – При­вет, Точ­ка. А те­перь ты что де­ла­ешь?

Точ­ка (гор­до): – Я спец­сим­вол ре­гу­ляр­но­го вы­ра­же­ния.

Я: – Это вро­де мас­ки фай­ла?

Точ­ка: – От­нюдь. Мы, ре­гу­ляр­ные вы­ра­же­ния, го­раз­до изящ­нее, чем эти урод­ские мас­ки. В мас­ке фай­ла я точ­ка – и все, а в выра­же­нии со­от­вет­ст­вую лю­бо­му сим­во­лу. Но все ме­ня­ет звез­дочка спра­ва от ме­ня. Вме­сте мы со звез­доч­кой зна­чим все что угодно – хоть бы и ни­че­го.»

Итак, точ­ки в ар­гу­мен­тах grep – это ре­гу­ляр­ные вы­ра­же­ния. Никак я до­б­рал­ся до су­ти? Встре­чаю еще од­ну точ­ку:

grep ‘\.$’ foo

«Я: – При­вет, Точ­ка. Про­шлая точ­ка мне все объ­яс­ни­ла. Ты – спецсим­вол ре­гу­ляр­но­го вы­ра­же­ния, так?

Точ­ка (сер­ди­то гля­дя вле­во): – Ну, ти­па долж­на бы­ла быть, но этот ду­рац­кий об­рат­ный слэш ме­ня эк­ра­ни­ро­вал. Я ста­ла обычной точ­кой.

Я: – Я ви­жу, ты за­клю­че­на в оди­ноч­ные ка­выч­ки. За­чем они? Это часть ре­гу­ляр­но­го вы­ра­же­ния?

Точ­ка: – Нет, обо­лоч­ка убе­рет их, пре­ж­де чем grep это уви­дит. Они эк­ра­ни­ру­ют об­рат­ный слэш.

Я: – Но ты же ска­за­ла, что об­рат­ный слэш эк­ра­ни­ру­ет те­бя.

Точ­ка: – Да, но в ре­гу­ляр­ном вы­ра­же­нии, бестолочь. А не для обо­лоч­ки.

Я: – Да­вай-ка убе­дим­ся, что я все по­нял пра­виль­но. Ка­выч­ки нуж­ны, что­бы по­ме­шать обо­лоч­ке от­клю­чить спе­ци­аль­ное зна­че­ние точ­ки с по­мо­щью об­рат­но­го слэ­ша (хо­тя для обо­лоч­ки точ­ка все рав­но не яв­ля­ет­ся спе­ци­аль­ным сим­во­лом), так что он вы­жи­вает и от­клю­ча­ет спе­ци­аль­ное зна­че­ние точ­ки в ре­гу­ляр­ном вы­раже­нии, так?

Точ­ка: – Точ­но! А все из-за ду­рац­кого об­рат­ного слэша…»

Спец­сим­во­лы

Спец­сим­вол (ме­та­сим­вол) – сим­вол, у ко­то­ро­го в оп­ре­де­лен­ном контек­сте по­яв­ля­ет­ся осо­бое зна­че­ние (в от­ли­чие от бу­к­валь­но­го). Их 32: ! “ # $ % & ‘ ( ) * + , - . / : ; < = > ? [ \ ] ^ _ ` { | } ~ и ПРОБЕЛ.

В по­ряд­ке уп­раж­не­ния: смо­же­те ли вы на­звать спе­ци­аль­ное зна­чение ка­ж­до­го из этих сим­во­лов для обо­лоч­ки? По­ни­ма­ет ли обо­лоч­ка ка­кие-ни­будь из этих сим­во­лов бу­к­валь­но?

Персональные инструменты
купить
подписаться
Яндекс.Метрика