bash-WTF: `foo` != $(foo)

Oct 06, 2011 11:14

А я тут замечательный WTF в sh встретил.

Есть строчка /var/log/daemon/api/*.log и нужно получить из неё регулярку для sed - т.е. поэскейпить звёздочку и точку.
Очевидное решение:
$ log="/var/log/daemon/api/*.log"
$ echo "$log" | sed 's/[\.\*]/\\&/g'
/var/log/daemon/api/\*\.log

Но есть пара неочевидных тонкостей:
$ log="/var/log/daemon/api/*.log ( Read more... )

linux, sh, dash, **it, freebsd, bash

Leave a comment

Comments 4

goodmesh October 6 2011, 10:59:24 UTC
внутри `foo` надо эскейпить бэкслеши бэкслешами)
Мне плюсик, да?

Reply

darkk October 6 2011, 11:07:55 UTC
Условно говоря, да.

Reply


drunkmaster October 6 2011, 14:24:49 UTC
Занятно, спасибо.
А я вообще как-то $() никогда не юзал. А документированные различия между ними есть?

Reply

darkk October 6 2011, 21:04:55 UTC
В man bash всё описано о различиях в секции Command Substitution.

Reply


Leave a comment

Up