I'm referring to *nix command line applications primarily, where you want to permanently modify the behavior from defaults.
Environmental variables are easily understood and implemented, usually requiring the user to modify their
~/.bashrc for a permanent change. However, namespace collision might be a problem (but unlikely if you're careful).
On the other hand, a lot of programs use
~/.programrc config files.
Is it simply verbosity? If your program only has 2 configuration settings, then a simple
export APP_SETTING=1 works just fine. However if you're starting to offer 5+ options then it should be time to start looking into a config file?