Почему не делает тильды (~), разворачивают внутренние двойные кавычки?

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

56
13.10.2017, 05:22
4 ответа
[

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

] [

]POSIX определяет []Double-Quotes[] как:[

] [
] [

]Символы, заключенные в двойные кавычки ( "" ), должны сохранять буквальное значение всех символов в двойных кавычках, с указанием исключение из знаков знак доллара, обратная кавычка и обратный слеш[

] [

]...[

] [

]Заявка обеспечивает, чтобы двойной кавычке предшествовала двойная кавычка. обратный слеш для включения в двойные кавычки. Параметр '@' имеет специальное значение внутри двойных кавычек[

] [
] [

] Кроме []$[], [] `[], [] \[] и []@[], другие символы рассматриваются как буквальные внутри двойных кавычек.[

].
48
27.01.2020, 19:33
[

][]Тильдное расширение[] определяется POSIX как:[

] [
] [

]Тильд-префикс состоит из []нецитируемого[] символа <тильда> в начале слова, за которым следуют все символы, предшествующие первому нецитируемому <слешу> в слове, или все символы в слове, если нет <слеша>. В задании можно использовать несколько тильд-префиксов: [...] после знака в задании, после любого не заключенного в кавычки , или и того, и другого. [...] Если ни один из символов в тильд-префиксе не цитируется, то символы в тильд-префиксе, следующие за , рассматриваются как возможное имя для входа в систему из базы данных пользователей. [...] Если имя логина нулевое (т.е. tilde-prefix содержит только тильду), то tilde-prefix заменяется значением переменной HOME. Если HOME не задан, то результаты не указываются. [...][

] [
] [

]Так что самый короткий ответ - "потому что так определено": цитирование любого из символов в префиксе, включая []~[], подавляет разложение.[

] [

]Оно также определяет разложение, как всегда приводящее к одному слову, поэтому цитирование будет излишним:[

] [
] [

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

] [
] [

]Если некоторый путь требует цитирования, но остальное является префиксом тильды, вы можете комбинировать тильдовое расширение и обычное цитирование прямо:[

] [
$ cat ~/"file name with spaces"
] [

]К более широкому "почему": поскольку нет мыслимого использования для разделения слов []~[], это должно быть поведением по умолчанию, а не требованием цитирования. Потому что нет необходимости заключать его в кавычки, придавая []~[] особое значение внутри кавычек было бы ненужным осложнением. И, конечно же, исторические причины означают, что это не могло быть изменено сейчас, даже если бы это было желательно.[

].
35
27.01.2020, 19:33

~ происходит из C-оболочки, задолго до того, как она была добавлена в оболочку Korn, а затем добавлена в спецификацию оболочки POSIX.

В C-оболочке ~ был оператор глобуса (расширенный той же рутиной, что и, например, расширяющий *.txt), так что, как и остальная часть глобуса, он не выполнялся в двойных кавычках.

24
27.01.2020, 19:33

Хотя это не дает ответа на вопрос, почему он разработан таким образом, вы используете вместо него $ HOME , если вам нужно заменить, поскольку это, по сути, то, что ~ делает.

$ echo "$HOME/some/path"
/home/braiam/some/path
12
27.01.2020, 19:33

Теги

Похожие вопросы