I have the following bash script (myscript.sh):
#!/bin/bash $(echo $0)
Now: before sourcing myscript.sh, $SHLVL is 2. After sourcing it, is 3. Why? Shouldn’t the command evaluation exit after echo?
Thank you!
Advertisement
Answer
When you source a script in bash, $0 expands to bash (or at least, the name of the shell bash was started as). So $(echo $0) expands first to $(echo bash), which evaluates to bash, which is then identified as the name of the command to run, so a new shell instance is started. You can observe the nesting by running
echo foo; source myscript.sh; echo bar
First you’ll see the string foo printed, then you’ll be at a prompt in the new shell. Type exit to exit it, and you’ll then see bar printed as your original command list finally completes.