Есть ли внутри двойных кавычек подстановочный знак?

3613
Matt

На "стандартном BASH" подстановочный знак внутри двойных кавычек появляется? Например:

$ touch abc $ ls "*abc*" 

Это будет или не будет работать на Bash?

Мне сказали, что Ubuntu поставляется с вариантом bash, который не соответствует POSIX или BASH. Это правда?

6
На какой вопрос вы хотели бы ответить первым? Ignacio Vazquez-Abrams 13 лет назад 0
...................И то и другое Matt 13 лет назад 0
Для справки, лучше задавать один вопрос за раз (возможно, именно это имел в виду Игнасио). slhck 13 лет назад 0

1 ответ на вопрос

6
hmontoliu

Краткий ответ: нет

Длинный ответ от man bash:

Заключение символов в двойные кавычки сохраняет буквальное значение всех символов в кавычках, за исключением $, `, \

Так:

~$ touch sas ~$ ls *a* sas ~$ ls "*a*" ls: cannot access *a*: No such file or directory 

Конечно, когда речь идет о двойных кавычках и звездочках, есть еще одно исключение: расширение параметра (то есть: "$ *") ... но это другая история

На второй вопрос: вы спрашиваете о тире? Dash - это легкая оболочка для скриптов. В Debian и в Ubuntu для каждого расширения (как на основе Debian) псевдоним sh; Основным преимуществом bash является его скорость, поэтому он используется по умолчанию для системных скриптов; однако bash по-прежнему доступен в качестве интерактивной оболочки для пользователей по умолчанию

 ~$ ls -l /bin/sh  lrwxrwxrwx 1 root root 4 2011-04-21 11:54 /bin/sh -> dash 
Ah.. Thanks. Yes, I was aware /bin/sh was aliased to `dash`. But anyway, someone I am talking to tells me this works on his Red Hat system [* globs when double quoted--he says the only way to be sure they do not glob is to use single quotes]. Any idea why? Matt 13 лет назад 0
Нет, ваш друг совершенно не прав - перепроверьте цитату из man bash, которую я написал в своем ответе. hmontoliu 13 лет назад 0
I did not say he was my friend :P We were having a disagreement, and him being a "programmer for 11 years" and has a big job, and me who's just been learning from google and stuff, since I disagreed with him, this other person [who is a friend's friend --this other guy was his friend] started talking about how I should not be brushing aside his knowledge, because he, by far, was the most knowledgeable one in the discussion. But thanks! :) Matt 13 лет назад 0