LINUX.ORG.RU

порядок подстановок в «»

 ,


0

2

Насколько я понимаю, если мы не экранируем строку-аргумент, баш делает в ней подстановки, прежде чем выполнить строку. Например

a=10
sed s/$a/20/ # тут развернется в sed s/10/20/
если строка заключена в апострофы (одинарные кавычки), он подстановки вообще не будет делать.

А зачем нужны двойные кавычки? Какой там порядок подстановок?



Последнее исправление: hfucker (всего исправлений: 2)

Тоже самое, что и без кавычек но более читабельнее в некоторых случаях

comp00 ★★★★
()

кавычки объединяют слова в строке в один аргумент/одно значение, при этом разрешая подстановку.

a="twenty five"

sed -e s/$a/25/g #wtf?
sed -e "s/$a/25/g" #ok

slapin ★★★★★
()

Зачем нужны двойные кавычки?

Одним словом: пробелы.

Поиграйтесь со включенным xtrace’ом ($ set -o xtrace) — поймете.

Zmicier ★★★★★
()
Последнее исправление: Zmicier (всего исправлений: 1)

одинарные кавычки заставляют шелл игнорировать все что внутри и не выполнять никаких подстановок (expansion); двойные же — запрещают экспансию всего кроме variable expansion, т.е. переменные будут подставлены. хинт: экспансий всяких очень много, смотри man 1 bash.

val-amart ★★★★★
()
Ответ на: комментарий от hfucker

Всегда пожалуйста.

А в качестве дополнительного задания рекомендую узнать, что значат кавычки $'' ($' здесь открывающая, ' — закрывающая) и какие подстановки выполняются в них. А для того, чтоб не попасться на ложную аналогию, — и что значат кавычки $"" тоже.

Zmicier ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.