На самом деле это единственный раздел про unix на этом форуме
Модераторы: /dev/random , Модераторы разделов
SLEDopit
Модератор
Сообщения: 4824
Статус: фанат консоли (=
ОС: GNU/Debian, RHEL
Сообщение
SLEDopit » 08.06.2012 13:35
Может я опять невнимательно ман прочитал. Подскажите, что делать в такой ситуации:
Есть переменная
~ выступает в роли разделителя (количество полей может быть существенно больше), и мне необходимо вытащить оттуда в другую переменную второе поле (i2).
Собственно, понятно, что можно так:
Есть ли возможность сделать тоже самое без создания 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
Статус: -
Сообщение
sgfault » 08.06.2012 14:06
SLEDopit писал(а): ↑ 08.06.2012 13:35
Есть ли возможность сделать тоже самое без создания subshell'a?
А так?
Код: Выделить всё
$ ( VAR="~i1~i2~i3~"; IFS='~'; set -- $VAR; echo $3 )
i2
SLEDopit
Модератор
Сообщения: 4824
Статус: фанат консоли (=
ОС: GNU/Debian, RHEL
Сообщение
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 определённо нельзя прикрутить (:
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
Статус: -
Сообщение
sgfault » 08.06.2012 14:23
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
Сообщение
SLEDopit » 08.06.2012 14:25
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.