# Migrating from POSIX Shells ## Notable changes - Arrays are full-class citizens, using the @ sigil. That means emails and git urls must be single quoted - The shell has proper scopes (variables get unset after the end of the definition scope), and functions are closures - The shell has an internal variable store. That means environment variables must be explicitly exported to be available to commands. - For now, per-command environment variables are not supported (ex: `LANG=it_CH.utf8 man man`) - The testing builtin (`[[ .. ]]`) was replaced with `test`, `exists`, and/or other commands - The control flow have been revisited, see the relevant part of the manual ## Customizing your prompt - Define the PROMPT function to be called whenever the prompt needs to be drawn. Simply print the prompt to stdout in the function (printf or git branch directly) - Variables are defined with all the colors (see the namespaces manual page for all details). This means you don't have to deal with all the escape codes directly. No more `\x033[33;m`, instead it's `${color::yellow}`.