shell substitution

На самом деле это единственный раздел про unix на этом форуме

Модераторы: /dev/random, Модераторы разделов

Аватара пользователя
SLEDopit
Модератор
Сообщения: 4824
Статус: фанат консоли (=
ОС: GNU/Debian, RHEL

shell substitution

Сообщение SLEDopit »

Может я опять невнимательно ман прочитал. Подскажите, что делать в такой ситуации:
Есть переменная

Код: Выделить всё

VAR="~i1~i2~i3~"

~ выступает в роли разделителя (количество полей может быть существенно больше), и мне необходимо вытащить оттуда в другую переменную второе поле (i2).
Собственно, понятно, что можно так:

Код: Выделить всё

RES=$(echo $VAR | cut -d~ -f3)

Есть ли возможность сделать тоже самое без создания subshell'a?
UNIX is basically a simple operating system, but you have to be a genius to understand the simplicity. © Dennis Ritchie
The more you believe you don't do mistakes, the more bugs are in your code.
Спасибо сказали:
Аватара пользователя
sgfault
Сообщения: 586
Статус: -

Re: shell substitution

Сообщение sgfault »

SLEDopit писал(а):
08.06.2012 13:35
Есть ли возможность сделать тоже самое без создания subshell'a?

А так?

Код: Выделить всё

$ ( VAR="~i1~i2~i3~"; IFS='~'; set -- $VAR; echo $3 )
i2
Спасибо сказали:
Аватара пользователя
SLEDopit
Модератор
Сообщения: 4824
Статус: фанат консоли (=
ОС: GNU/Debian, RHEL

Re: shell substitution

Сообщение SLEDopit »

sgfault
ну без subshell'a тут всё же не обошлось (:
а именно заменами, видимо никак. эх, жаль.
спасибо.

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

Код: Выделить всё

var3=`echo $var|cut -d~ -f4`
var2=`echo $var|cut -d~ -f3`
var1=`echo $var|cut -d~ -f2`

можно было бы read , наверное, прикрутить, но есть часть полей, которые нужно пропустить.
я забыл, read создаст свой subshell и все переменные останутся в нём. read определённо нельзя прикрутить (:
UNIX is basically a simple operating system, but you have to be a genius to understand the simplicity. © Dennis Ritchie
The more you believe you don't do mistakes, the more bugs are in your code.
Спасибо сказали:
Аватара пользователя
sgfault
Сообщения: 586
Статус: -

Re: shell substitution

Сообщение sgfault »

SLEDopit писал(а):
08.06.2012 14:11
sgfault
ну без subshell'a тут всё же не обошлось (:
а именно заменами, видимо никак. эх, жаль.
спасибо.

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

Код: Выделить всё

var3=`echo $var|cut -d~ -f4`
var2=`echo $var|cut -d~ -f3`
var1=`echo $var|cut -d~ -f2`

можно было бы read , наверное, прикрутить, но есть часть полей, которые нужно пропустить.
я забыл, read создаст свой subshell и все переменные останутся в нём. read определённо нельзя прикрутить (:

Ээ, я написал subshell только для потому, что проверял это в командной строке. Те, в скрипте это будет как-то так

Код: Выделить всё

OIFS="$IFS"
IFS='~'
set -- $var
var3="$4"
var2="$3"
var1="$2"
IFS="$OIFS"

и без subshell-а, разве нет?
Спасибо сказали:
Аватара пользователя
SLEDopit
Модератор
Сообщения: 4824
Статус: фанат консоли (=
ОС: GNU/Debian, RHEL

Re: shell substitution

Сообщение SLEDopit »

sgfault писал(а):
08.06.2012 14:23
и без subshell-а, разве нет?
Ну да. Согласен. (:
Спасибо.
UNIX is basically a simple operating system, but you have to be a genius to understand the simplicity. © Dennis Ritchie
The more you believe you don't do mistakes, the more bugs are in your code.
Спасибо сказали: