Я пытаюсь построить функцию zsh, которая возвращает результат на основе временного интервала. Первоначально условие «Ты жаждет» верно, но после изменения переменной thirsty
через командную строку и установки ее в значение false, выполняется инструкция initial if, но переменная thirsty
в ней не изменяет global variable thirsty
. Есть ли способ изменить глобальную переменную thirsty
?Невозможно изменить глобальную переменную в функции, используемой для запроса zsh
thirsty=
last_time=
drink_water() {
echo -n "$thirsty"
if [[ $thirsty == false ]]; then
last_time="$[$(date +%s) + 10]"
thirsty=true
echo -n "${last_time} $(date +%s) ${thirsty}"
elif [[ $[last_time] -lt $(date +%s) ]]; then
echo -n " You're thirsty"
fi
}
(BTW, 'echo -n' на самом деле плохая форма - [спецификация POSIX для' echo'] (http://pubs.opengroup.org/onlinepubs/9699919799/utilities/echo.html) поведение ярлыков, когда '-n' предоставляется как определенный реализацией, то есть разные оболочки могут делать разные вещи с помощью' echo -n'. Если вы хотите что-то * гарантированное * напечатать точную строку без новой строки, используйте строку 'printf '% s' "', см. также раздел ИСПОЛЬЗОВАНИЕ ПРИМЕНЕНИЯ вышеупомянутой ссылки). –
Говоря прямо на вопрос: ** Все переменные оболочки глобальны, если вы явно не указали их иначе **. Вот почему в этом вопросе нужен явный регенератор - код, который кто-то может копировать, вставлять и запускать без изменений, чтобы увидеть поведение для себя. –
У меня есть другая функция 'spacehip_prompt', которая вызывает эту функцию. И затем, в конце концов, у меня есть 'PROMPT = '$ (spaceship_prompt)'' –