The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  вход/выход  слежка  RSS
"Напрямую или в скрипте - по разному работает ${name/asd/fgh}"
Вариант для распечатки  
Пред. тема | След. тема 
Форум Программирование под UNIX (Shell скрипты)
Изначальное сообщение [ Отслеживать ]

"Напрямую или в скрипте - по разному работает ${name/asd/fgh}"  +/
Сообщение от Af. on 09-Фев-12, 00:57 
В Bash (4.2.10(1)-release) подстановка шаблона ${name/asd/fgh} (которая в man bash названа Pattern substitution) у меня по разному работает из командной строки и из скрипта.

Есть скрипт:

#!/bin/bash
string="name $( echo -e "\t" ) = some value = more"
string="${string/*([[:space:]])=/=}"
echo "Have '${string}'."

Если запустить скрипт, то результат:

Have 'name      = some value = more'.

А если напрямую в командной строке дать подряд эти строки, то пробелы перед первым '=' в строке успешно вырезаются:

Have 'optionName= some = value'.

Как это объяснить? Не пойму имеет ли отношение к вопросу фраза из мана: шаблон разворачивается так же, как разворачиваются имена файлов (вольный перевод).

Как скриптом сделать это - отрезать пробельные символы перед первым "равно"?

Ответить | Правка | Cообщить модератору

Оглавление

Сообщения по теме [Сортировка по времени | RSS]


1. "Напрямую или в скрипте - по разному работает ${name/asd/fgh}"  +/
Сообщение от Andrey Mitrofanov on 09-Фев-12, 10:00 
> В Bash (4.2.10(1)-release) подстановка шаблона ${name/asd/fgh} (которая в man bash названа
> Pattern substitution) у меня по разному работает из командной строки и
> из скрипта.
> А если напрямую в командной строке дать подряд эти строки, то пробелы
> Как скриптом сделать это - отрезать пробельные символы перед первым "равно"?

$ shopt extglob
extglob         off
$ string="name $( echo -e "\t" ) = some value = more"
$ echo "Have '${string/*([[:space:]])=/=}'."
Have 'name       = some value = more'.
$ echo "Have '${string/+([[:space:]])=/=}'."
Have 'name       = some value = more'.
$ shopt -s extglob
$ shopt extglob
extglob         on
$ echo "Have '${string/*([[:space:]])=/=}'."
Have 'name= some value = more'.
$ echo "Have '${string/+([[:space:]])=/=}'."
Have 'name= some value = more'.
$ echo $BASH_VERSION
4.1.5(1)-release
$ _


И кста, чего я собственно ещё +() приплёл:
$ shopt extglob
extglob         off
$  string="name $( echo -e "\t" ) = some value = more"
$ string="name $( echo -e "\t" ) = some value = more"
$ echo "Have '${string/*([[:space:]])=/=}'."
Have 'name       = some value = more'.
$ echo "Have '${string/+([[:space:]])=/=}'."
Have 'name       = some value = more'.
$ shopt -s extglob
$ shopt extglob
extglob         on
$ echo "Have '${string/*([[:space:]])=/=}'."
Have 'name       = some value = more'.
$ echo "Have '${string/+([[:space:]])=/=}'."
Have 'name= some value = more'.
$ echo $BASH_VERSION
3.2.39(1)-release
$ _

Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

Архив | Удалить

Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2025 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру