значення "" "(апостроф) в термінальних командах


11

З якоїсь дивної причини я спробував "" "як роздільник слів у ідентифікаторах, як у:

$ export foo'bar=1
> 
> ^C
$ 

Результат, як показано вище, ідентично, що швидкі зміни на ">" і система, очевидно, чекає додаткової інформації з мого боку. Як бачите, мені довелося ctrl-C втекти. Те саме відбувається за допомогою інших команд, таких як

$ ls foo'bar
$ mkdir foo'bar

Мені цікаво сенс у всьому цьому, саме те особливе значення "" "має в термінальних командах (настільки особливе, що воно розчленоване навіть усередині ідентифікаторів).

Додатково: Окрім цього, я також хотів би знати набір спеціальних або недійсних символів у назвах файлів і папок, як у Unix-подібних, так і в системах Windows (щоб отримати загальну підмножину безпечних) (зокрема, що про все не-ASCII?).

Дякую, Денисе


У світі Linux всі символи, крім \ 0 (null) та /, дозволені. Однак це не означає, що вони всі бажані. Багато людей вважають за краще уникати символів, які мають особливе значення для оболонки. Якщо ви хочете дізнатися про Windows, зверніться до посилання на Windows.
Скотт Северанс

Відповіді:


15

Символ '- це дуже потужний символ, коли він використовується в будь-якій команді оболонки. В основному '(позначки апострофа) вимикає всі види перетворень чи модифікацій. Він вважатиме, що додається до знаків 'як єдине ціле, тобто єдиний параметр. Абсолютно ніякої заміни чи розширення не відбудеться.

Приклад:

 $ echo '$HOME'

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

Якщо ви хочете використовувати апостроф таким, яким він є, вам слід уникнути цього:

 $ mkdir foo\'bar

 $ cd foo\'bar

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

Отже, виправлена, ваша команда буде:

 $ export foo\'bar=1

ПРИМІТКА. Як зауважив Мілан Тодорович, це не буде дійсним, оскільки в цьому випадку ви не можете використовувати апостроф.


1
@ denis63 прийміть відповідь, якщо це те, що вам потрібно було побачити :)
Rinzwind

7

Персонаж '- особливий персонаж. Ви використовуєте його для позначення частини запису в командному рядку, яка не буде змінена (наприклад, немає заміни символів підстановки). Наприклад:

$ ls 'bla*'
ls: cannot access bla*: No such file or directory

Це означає, що аргументом для lsбуло bla*і не все, з чого починається bla.

Причина, чому ви отримуєте >персонаж, полягає в тому, що ви повинні використовувати одну 'для відкриття та одну 'для закриття частини, яка не буде змінена.

Якщо ви хочете використовувати 'в папці імен ви повинні екранувати його так: \'. Тож якщо ви хочете перерахувати папку з назвою foo'bar, слід ввести ls foo\'bar.

О, і я не впевнений, чи можна використовувати 'в середовищі змінні імена. Я думаю, що ти не можеш використовувати export foo\'bar=1,

Сподіваюсь, це допомагає.


Підвищення вашого спостереження щодо обмеження імені змінної середовища.
Франтик

Поки не можна внести пропозицію (нове для askubuntu), але відчуття є. Перевірив імена env var, це так само, як ти кажеш. (Я відчуваю себе трохи дурним, що не думав про відкриття / закриття розмежувачів, але тоді я розглядав "" "як справжній апостроф, а не одноцитата). Денис
деніс 63
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.