Форум программистов, компьютерный форум, киберфорум
Shell, Bash
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.75/8: Рейтинг темы: голосов - 8, средняя оценка - 4.75
50 / 16 / 11
Регистрация: 27.03.2013
Сообщений: 789
1

Поясните пожайлуста механизм работы - PASSWORD=$PASSWORD$BUFF - в цикле

19.05.2017, 12:17. Показов 1532. Ответов 2
Метки нет (Все метки)

Мне непонятен механизм работы вот такого написания переменной.

Bash
1
2
PASSWORD=$PASSWORD$BUFF
# PASSWORD=$BUFF$PASSWORD
Как это называется ?

Вот кусок скрипта, с пояснениями

Кликните здесь для просмотра всего текста
Bash
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
echo -------------------------- Пример 3 -------------------------
echo
echo -e "PASSWORD - создается переменная с пустым значением\n \
while read -s -n1 BUFF - запускается цикл while и происходит построчное чтение\n \
вводимого значения.\n \
Ключ  -n1 позволяет получать циклу по одному символу и\n \
пока цикл получает значение, для это существует проверка условия\n \
[[ -n \$BUFF ]] - которое проверяет, что строка не пуста, -\n \
до тех пор работает цикл. Пока работает цикл, переменная PASSWORD\n \
накапливает полученные символы, используя конструкцию \$PASSWORD\$BUFF\n \
$PASSWORD$BUFF при каждой итерации, символ передается в переменную \$PASSWORD ,\n \
которая представляет из себя стек."
echo
PASSWORD=""
while read -s -n1 BUFF
[[ -n $BUFF ]]
do
    PASSWORD=$PASSWORD$BUFF
    # PASSWORD=$BUFF$PASSWORD
    echo -en "*"
done
echo
echo $PASSWORD   # эта строка только для проверки работы скрипта
# при использовании скрипта , эта строки должна быть за комментирована
exit 0 
 
  # PASSWORD=$BUFF$PASSWORD - если использовать такую конструкцию, то 
  # введенный пароль - буден записан наоборот, например, вводили
  # 12345 , но в переменную он запишется 54321


И еще вопрос, а почему вот так ?

Кликните здесь для просмотра всего текста
Bash
1
2
3
# PASSWORD=$BUFF$PASSWORD - если использовать такую конструкцию, то 
  # введенный пароль - буден записан наоборот, например, вводили
  # 12345 , но в переменную он запишется 54321
__________________
Помощь в написании контрольных, курсовых и дипломных работ здесь
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
19.05.2017, 12:17
Ответы с готовыми решениями:

Password
Что я неправильно сделал? Работаю по книге "Гибкая разработка веб-приложений на Rails". Нажимаю...

Password
Одна из программ по взлому вайфая выдала пароль в следующих формах Master Key: E2 19 4E DB 91 76...

БД: Password dialog
Здравствуйте, уважаемые программисты! Обращаюсь к Вам с просьбой помочь в написании программы. Пишу...

Password manager
Посоветуйте программу для хранения паролей. Желательно конечно, чтобы она была и на линукс, и на...

2
Модератор
Эксперт NIX
2787 / 2032 / 681
Регистрация: 02.03.2015
Сообщений: 6,509
19.05.2017, 12:43 2
Лучший ответ Сообщение было отмечено Marinero как решение

Решение

В чем непонятность? Тут вся загвоздка в очередности действий: сначала раскрытие переменных (выполняется то, что справа от знака «=»), потом присваивание: Новое значение переменной PASSWORD будет равно старое значение переменной PASSWORD с присоединенным значением переменной BUFF
1
50 / 16 / 11
Регистрация: 27.03.2013
Сообщений: 789
19.05.2017, 14:41  [ТС] 3
Цитата Сообщение от Marinero Посмотреть сообщение
значение переменной PASSWORD будет равно старое значение переменной PASSWORD с присоединенным значением переменной BUFF
Вот этот момент и не мог сформулировать, понимал, но не мог объяснить.
Так как если убрать $PASSWORD, а оставить $BUFF, то не происходит накопление символов и запоминается только последний введенный символ.
Если использовать пустое значение $PASSWORD и значение $BUFF в каждой итерации, тогда все введенные символы по принципу стека (стек, в данном слкчае,не совсем правильная формулировка) помещаются в переменную PASSWORD и сохраняются в ней.

Добавлено через 7 минут
Первый пришел первый и выведен на экран.
В случае с PASSWORD=$BUFF$PASSWORD, здесь в переменную значения помещаются как в стек, и вывод элементов из переменной происходит начиная с последнего введенного символа.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
19.05.2017, 14:41

Password LineEdit
Здравствуйте, мне надо сделать окно с паролем, подскажите, если знаете - есть ли у lineEdit ...

sha_hash password?
Я извиняюсь мне дали скрипт для моего сайта по игре но когда создаю аккаунт пароль записывается в...

Lazarus и Password
Здравствуйте, прошу мне извенить, если не совсем правильно пишу по руском язике. У меня такая...

Password Protection
Всем привет! Хочу установить пароль на партишн внешнего винчестера. Винчестер фирмы Toshiba. ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru