bash, как расставить ";" [РЕШЕНО]

nafanja
так вот как ее преобразовать в переменные баша?
чего проще:
% eval "$(lsblk -o NAME,FSTYPE,MOUNTPOINT,LABEL,UUID,PARTLABEL,RM,MODEL,SERIAL,SIZE,ROTA,TYPE,TRAN,VENDOR -a -P)"
% echo $NAME
sda
Об этом я и говорил – исполнение непроверенного кода.
red, что то я думал что такое не прокатит без точки с запятой 0_o, даже и пробовать не стал, но все заработало.
но в данном случае больше подходит вариант предложенный Natrio, так как в колонках может быть и не совместимые с башем названия переменных типа PHY-SEC
Псевдографический инсталлятор Arch Linux ver. 3.8.2
Благодарности принимаются на ЯД 410012815723874
Natrio
Об этом я и говорил – исполнение непроверенного кода.
да при чёт тут исполнение непроверенного кода


% z='a="date" b="ls -1" c="echo 123"'
% echo $z
a="date" b="ls -1" c="echo 123"
% echo $a

% eval $(echo ${z})
% echo $a
date
%
до исполнения нужно преодолеть ещё один уровень вложенности
TEMP='TMP="$(date)"'
eval "${TEMP}"
echo "${TMP}"
можно date заменить например на rm с параметрами и последствия известны.
Псевдографический инсталлятор Arch Linux ver. 3.8.2
Благодарности принимаются на ЯД 410012815723874
от такого не застрахована и обычная переменная даже без всяких eval:

% c="$(date)"
% echo $c
Чт июн 12 17:24:26 UTC 2014
чтобы этого избежать нужно использовать одинарные кавычки:

% c='$(date)'
echo $c
$(date)
в общем tr должен развеять все твои опасения:

% eval "$(lsblk -o NAME,FSTYPE,MOUNTPOINT,LABEL,UUID,PARTLABEL,RM,MODEL,SERIAL,SIZE,ROTA,TYPE,TRAN,VENDOR -a -P |tr \" \')"
в случае с lsblk я например не знаю какие точно символы могут там встретиться а какие нет, что экранируется а что нет.
но если там встретится одна одинарная кавычка то будет fail.
Псевдографический инсталлятор Arch Linux ver. 3.8.2
Благодарности принимаются на ЯД 410012815723874
а так если две )))
TEMP="TMP=\"sdfg' date'\""
echo "${TEMP}"
TEMP=$(tr \" \' <<< ${TEMP})
eval "${TEMP}"
Псевдографический инсталлятор Arch Linux ver. 3.8.2
Благодарности принимаются на ЯД 410012815723874
Чуть не забыл – раз lsblk кодирует не все "опасные" символы, его вывод надо раскодировать так:
printf -v ПЕРЕМЕННАЯ '%b' "$ПЕРЕМЕННАЯ"
 
Зарегистрироваться или войдите чтобы оставить сообщение.