Add Environment Variable to PATH I am new to the Apple "eco system" and I am trying to setup my environment variables for local development.

Here is what I have in my ~/.bash_profile (simplified for brevity):

export PATH="$JAVA_HOME/bin:$MAVEN_HOME/bin:$DEV_CLI:$PATH"
export DEV_CLI="/path/to/cli/$BRANCH_NAME/bin"
export BRANCH_NAME=dev


What I want here is to have my dev cli accessible from any point in the terminal. The crucial thing here is I want to change the BRANCH_NAME on different occasions.

Currently my solution works only if I do source ~/.bash_profile in every terminal tab/window I use.

So let's say that I open new terminal and do:


echo $DEV_CLI - it will be printed, 
echo $PATH - the path for the cli will be missing there
source ~/.bash_profile
echo $PATH - all variables set in the path will be shown (cli path including)


I am running on Mac High Seirra.

Any help explanation will be deeply appreciated!
Your variables are out of order.    You cannot set a variable based on  other variables defined after it.

Set the commands in your ~/.bash_profile to the following:

export BRANCH_NAME=dev
export DEV_CLI="/path/to/cli/$BRANCH_NAME/bin"
export PATH="$JAVA_HOME/bin:$MAVEN_HOME/bin:$DEV_CLI:$PATH"


Why this is happening...


When you open a new shell, it reads ~/.bash_profile
It sets a PATH environment variable with other environment variables that aren't defined yet (DEV_CLI and BRANCH_NAME)
The environment variables are then defined
You re-source ~/.bash_profile and sets the PATH again, this time with defined variables


It's important to note that this has nothing to do with the Apple "eco system," per se.  This is a Bash issue, and more generally a shell issue; you would literally have this problem whether you were on Apple, BSD, Linux, Unix and even Windows.