If a repository is already cloned:
git submodule add [email protected]:sohale/bash-stash.git external/bash-stash
The submodules still need to be synced, re-initialized (since your local .git/config file would not be synced) and pulled recursively:
git pull
git submodule init
git submodule update --recursive
Following @mufidu's answer, I separated the main part into two steps.
The third line, updates your local .git/config (untracked) file by copying information about the submodule into it -- based on the .gitmodules file. It doesn't actually update any tracked file or code or the content of the submodules.
Note that since you already have cloned, the local .git/config file (which is like a cache), most likely will be out of sync (and incorrect) and won't be fixed otherwise.
The first line, git pull ..., is to emphasize that it is already cloned, and to cover the answers that suggested git pull --recurse-submodules.