私は、時間間隔に基づいて出力を返すzsh関数を構築しようとしています。最初は "あなたが渇いています"という条件が真ですが、変数thirsty
をコマンドラインで変更してfalseに設定した後は、最初の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
}
(実際には、 'echo -n'は実際には悪い形式です - ' 'echo'のPOSIX仕様(http://pubs.opengroup.org/onlinepubs/9699919799/utilities/echo.html)は、 '-n'は実装定義として提供されています。つまり、異なるシェルが' echo -n'で異なることができます。 ";上記のリンクのAPPLICATION USAGEセクションも参照してください)。 –
質問に直接お答えください。**すべてのシェル変数は、明示的にフラグを立てない限り、グローバルです。これは明白な再生器を必要とするのはなぜですか?他の人がコピーして貼り付けて、変更を加えずに動作して自分自身の行動を見ることができます。 –
私はこの関数を呼び出す別の関数 'spaceship_prompt'を持っています。そして、最後に私は 'PROMPT = '$(spaceship_prompt)'を持っています。 –