Bash: и снова работа с переменными, stakado, 02-Апр-14, 08:46 [смотреть все]Здравствуйте! Есть скрипт, в котором объявляются переменные. Задача - получить список переменных, объявленных в скрипте. Вопрос на форуме я уже задавал и получил ответ (http://www.opennet.dev/openforum/vsluhforumID1/95498.html), но в дальнейших разработках появилась проблема. Итак, скрипт, в котором объявляются переменные и находятся их имена: #!/bin/bashBashVars=`set -o posix; set` var1="111111" var2="aaaaaa" var3="zxczczx" var4="$var1 asdas --$var2" var5="zzzzzzzzzzzzzzzzzzz" VarNames=`grep -vFe "$BashVars" <<<"$(set -o posix ; set)" | grep -v ^BashVars=`; unset BashVars echo "$VarNames" При исполнении скрипта вижу: var1=111111 var2=aaaaaa var3=zxczczx var5=zzzzzzzzzzzzzzzzzzz Вопрос: куда делась переменная $var4? Сдаётся, что ошибаюсь в какой-то мелочи, но вот найти где не могу уже второй день. Подскажите, пожалуйста, каким образом вывести на экран переменную $var4.
|
- Bash: и снова работа с переменными, Pahanivo, 10:31 , 02-Апр-14 (1)
- Bash: и снова работа с переменными, stakado, 10:47 , 02-Апр-14 (2)
> скорей всего когда сравниваются списки свой вклад вносят апострафы ...Вы правы, дело в апострофах. Меняю переменную var1="111111 sdfsdfs" и она из вывода скрипта тоже исчезает. При этом в простом выводе set переменные var1 и var4 отображаются в следующем виде: var1='111111 sdfsdfs' var2=aaaaaa var3=zxczczx var4='111111 sdfsdfs asdas --aaaaaa' Т.е. переменные эти отсекаются при фильтрации переменных grep'ами. > но разбираться в дальнейшей хрени типа: > VarNames=`grep -vFe "$BashVars" <<<"$(set -o posix ; set)" | grep -v ^BashVars=`; > unset BashVars > чето желания нЭт ) Очень жаль :). Хрень эта почти полностью скопирована отсель: http://stackoverflow.com/questions/1305237/how-to-list-varia... Может хоть какая маленькая мыслишка есть как бороться с апострофами? Я бы с удовольствием её развил. ;)
- Bash: и снова работа с переменными, Pahanivo, 11:16 , 02-Апр-14 (3)
- Bash: и снова работа с переменными, stakado, 12:01 , 02-Апр-14 (4)
> копипаст без понимания бесполезен чуть больше, чем полностьюНа этом форуме не первый день, к Вашим репликам привык уже. Так что даже реагировать никак не стану ;). > 1) для начала, надо сформулировать задачу полностью - какие данные имеем и > что нужно получить, какие инструменты доступны > 2) бороться можно както так "\", но опять же надо четко понимать где бороться и зачем Проблему свою решил. Моя задача несколько отличается, от изначально описанной. Мне требуются лишь имена переменных, без их значений (но зная имена переменных вывести их значения не трудно). Не уверен, что _это_ кому-нибудь пригодится, но всё же решение проблемы принято описывать: #!/bin/bash BashVars=`set -o posix; set | awk -F = '{ print $1 }'` var1="111111 sdfsdfs" var2="aaaaaa" var3="zxczczx" var4="$var1 asdas --$var2" var5="zzzzzzzzzzzzzzzzzzz" var6="${var1} zxcxzcz" var_7="adasdsdsad" VarNames=`set -o posix; set | awk -F = '{ print $1 }' | grep -ve "^$BashVars$" | grep -v "BashVars"; unset BashVars` echo $VarNames Скрипт заносит в переменную VarNames имена всех переменных, инициализированных пользователем в скрипте. P.S.: при этом, как написал выше, со скриптом воюю второй день. Вчера делал всё то же самое, что и сегодня. Но вчера не получалось, а сегодня вышло. P.P.S.: ув. Pahanivo, спасибо за помощь! Ваши рассуждения натолкнули меня на верный путь.
- Bash: и снова работа с переменными, Andrey Mitrofanov, 13:25 , 02-Апр-14 (6)
- Bash: и снова работа с переменными, Pahanivo, 06:27 , 03-Апр-14 (7)
- Bash: и снова работа с переменными, startx1, 20:16 , 03-Апр-14 (8)
- Bash: и снова работа с переменными, pavlinux, 03:13 , 04-Апр-14 (9) +1
- Bash: и снова работа с переменными, Pahanivo, 08:50 , 04-Апр-14 (10)
- Bash: и снова работа с переменными, pavlinux, 03:10 , 05-Апр-14 (11)
- Bash: и снова работа с переменными, stakado, 07:47 , 07-Апр-14 (12)
> Я вот сидел, думал, где бы эту фишу применить... > Дельного ничего не придумывается, точнее есть варианты, > но они из ряда параноидальной безопасности либо кроссшельные: > типа и на bash, и на csh, и на zsh, dash.Есть конфиг-скрипт 1.sh: var1=zzz var2=bbbb ... Есть рядом другой скрипт, который читает этот конфиг (путем исполнения). Для дебага хочется вывести все переменные (с их значениями) на экран. Для этого, собственно, и заполняется массив имен переменных. P.S.: ЕГЭ не сдавал, не было его ещё в то время.
|