Онлайн робочі станції OnWorks Linux та Windows

логотип

Безкоштовний онлайн-хостинг для робочих станцій

<Попередній | зміст | Наступна>

Подвійні лапки

Перший тип цитування, який ми розглянемо подвійні лапки. Якщо ми помістимо текст у подвійні лапки, усі спеціальні символи, які використовує оболонка, втрачають своє особливе значення і розглядаються як звичайні символи. Виняток становлять «$», «\» (зворотна коса риса) та «`» (зворотні лапки). Це означає, що розділення слів, розширення імені шляху, розширення тильди та розширення дужок пригнічуються, але розширення параметрів, арифметичне розширення та підстановка команд все ще виконуються. Використовуючи подвійні лапки, ми можемо впоратися з іменами файлів, які містять вбудовані пробіли. Скажімо, ми стали нещасною жертвою файлу під назвою два слова.txt. Якщо ми спробуємо використати це в командному рядку, розділення слів призведе до того, що це буде розглядатися як два окремі аргументи, а не як бажаний один аргумент:



[me@linuxbox ~]$ ls -l два слова.txt

ls: неможливо отримати доступ до двох: немає такого файлу чи каталогу

ls: не вдається отримати доступ до words.txt: такого файлу чи каталогу немає

[me@linuxbox ~]$ ls -l два слова.txt

ls: неможливо отримати доступ до двох: немає такого файлу чи каталогу

ls: не вдається отримати доступ до words.txt: такого файлу чи каталогу немає


Використовуючи подвійні лапки, ми зупиняємо поділ слів і отримуємо потрібний результат; крім того, ми можемо навіть усунути пошкодження:



[me@linuxbox ~]$ ls -l "два слова.txt"

-rw-rw-r-- 1 я я 18 2016 02:20 два слова.txt [me@linuxbox ~]$ mv "два слова.txt" two_words.txt

[me@linuxbox ~]$ ls -l "два слова.txt"

-rw-rw-r-- 1 я я 18 2016 02:20 два слова.txt [me@linuxbox ~]$ mv "два слова.txt" two_words.txt


Там! Тепер нам не потрібно продовжувати вводити ці докучливі подвійні лапки.

Пам’ятайте, що розширення параметрів, арифметичне розширення та заміна команд усе ще мають місце в подвійних лапках:


зображення

[me@linuxbox ~]$ echo "$USER $((2+2)) $(cal)"

я 4 лютого 2016 року


Su

Mo

Tu

We

Th

Fr

Sa

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29


Нам варто трохи поглянути на вплив подвійних лапок на заміну команд. Спочатку давайте трохи глибше розглянемо, як працює розділення слів. У нашому попередньому прикладі ми бачили, як розщеплення слів видаляє зайві пробіли в тексті:


[me@linuxbox ~]$ луна це a

це перевірка

тест

[me@linuxbox ~]$ луна це a

це перевірка


зображення

За замовчуванням розбиття слів шукає наявність пробілів, табуляції та нового рядка (символів переходу рядка) і розглядає їх як роздільники між словами. Це означає, що пробіли без лапок, табуляції та нові рядки не вважаються частиною тексту. Вони служать лише як роздільники. Оскільки вони розділяють слова на різні аргументи, наш приклад командного рядка містить команду, за якою слідують чотири різні аргументи. Якщо ми додамо подвійні лапки:


[me@linuxbox ~]$ echo "це а

тест"

[me@linuxbox ~]$ echo "це а


це перевірка

це перевірка


зображення

поділ слів пригнічується, а вбудовані пробіли не розглядаються як роздільники, а стають частиною аргументу. Після додавання подвійних лапок наш командний рядок містить команду, за якою слідує один аргумент.

Той факт, що нові рядки вважаються роздільниками за механізмом поділу слів, спричиняє цікавий, хоча й тонкий, ефект на заміну команд. Розглянемо наступне:


зображення

[me@linuxbox ~]$ луна $(кал)

лютий 2016 р. Нд Пн Вт Ср Чт Пт Сб 1 2 3 4 5 6 7 8 9 10 11 12 13 14

15 16 17 18 19 20 21 22 23 24 25 26 27 28 29

[me@linuxbox ~]$ echo "$(cal)"

лютого 2016


Su

Mo

Tu

We

Th

Fr

Sa

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29


У першому випадку підстановка команди без лапок призвела до того, що командний рядок містить 38 аргументів. У другому — командний рядок з одним аргументом, який містить вбудовані пробіли та новий рядок.


Найпопулярніші хмарні обчислення ОС на OnWorks: