The OpenNET Project / Index page

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




Версия для распечатки Пред. тема | След. тема
Новые ответы [ Отслеживать ]
Bash: и снова работа с переменными, !*! stakado, 02-Апр-14, 08:46  [смотреть все]
Здравствуйте!
Есть скрипт, в котором объявляются переменные. Задача - получить список переменных, объявленных в скрипте.
Вопрос на форуме я уже задавал и получил ответ (http://www.opennet.dev/openforum/vsluhforumID1/95498.html), но в дальнейших разработках появилась проблема. Итак, скрипт, в котором объявляются переменные и находятся их имена:
#!/bin/bash

BashVars=`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)



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

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