LINUX.ORG.RU

POSIX shell, подстановка переменных


0

0

В чём отличие между

1) $var
2) "$var"
3) ${var}
4) "${var}"

а так же

1) $( cmd )
2) "$( cmd )"

Что означает "Pathname expansion" в этом куске из мана:

The parameter name or symbol can be enclosed in braces, which are optional except for positional parameters with more than one digit or
when parameter is followed by a character that could be interpreted as part of the name. If a parameter expansion occurs inside double-
quotes:

1. Pathname expansion is not performed on the results of the expansion.

2. Field splitting is not performed on the results of the expansion, with the exception of @.

???

Deleted

> Что означает "Pathname expansion" в этом куске из мана

раскрытие шаблонов * ? и т.д. на имена файлов.

то есть:

$ touch 1.xxx
$ touch 2.xxx

$ var='*.xxx'

$ echo $var
1.xxx 2.xxx

$ echo "$var"
*.xxx

dilmah ★★★★★
()

$var и ${var} - просто подстановки. '{' и '}' для экранирования символов имени переменной в сложных конструкциях (что бы sh выполнял именно подстановку, а не интерпретировал как то иначе)

"$var" в теле [ ] (ex: if [ "$var" ] ; then)

$(cmd) эквивалентно `cmd` - т.е. постановка вывода команды.

marsijanin ★★
()
Ответ на: комментарий от marsijanin

>> $(cmd) эквивалентно `cmd` - т.е. постановка вывода команды.

Я это спрашивал применительно к pathname expansion. Сейчас уже сам проверил:

ivan@localhost ~/test $ touch 1 2 ivan@localhost ~/test $ echo $( echo '*' ) 1 2 ivan@localhost ~/test $ echo "$( echo '*' )" *

Всем спасибо за разъяснения 8).

Deleted
()
Ответ на: комментарий от Deleted

ivan@localhost ~/test $ touch 1 2
ivan@localhost ~/test $ echo $( echo '*' )
1 2
ivan@localhost ~/test $ echo "$( echo '*' )"
*

фрмтрвние!

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