Sample bash script where I'm testing using variable expansion in command names:
test_command_w_variable_expansion_in_name.sh:
#!/bin/bash
# Gabriel Staples
# 21 Mar. 2020
echo "PATH = \"$PATH\""
# PATH="$HOME/bin:$PATH"
# echo "PATH = \"$PATH\""
# 1st, create a command in ~/bin to test here
mkdir -p ~/bin
echo -e "#!/bin/bash\necho \"This is a test script found in ~/bin.\"" > ~/bin/gs_test_script
chmod +x ~/bin/gs_test_script
# 1)
# command: `echo`
CMD_PREFIX="ec"
${CMD_PREFIX}ho "hey" # works
# exec "${CMD_PREFIX}ho" "hey" # works, but then prevents the code below from running!
# eval "${CMD_PREFIX}ho" "hey" # does NOT work, but also throws no error
# 2)
# command: `gs_test_script` from ~/bin
CMD_PREFIX="gs_test"
~/bin/gs_test_script # works!
gs_test_script # works!
${CMD_PREFIX}_script # works!
Output:
$ ./test_command_w_variable_expansion_in_name.sh
PATH = "/home/gabriel/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin"
hey
This is a test script found in ~/bin.
This is a test script found in ~/bin.
This is a test script found in ~/bin.
Questions:
Now, if I uncomment this line:
# exec "${CMD_PREFIX}ho" "hey" # works, but then prevents the code below from running!
, the code below it no longer runs, and I get this output instead! Notice I no longer get the 3 printouts ofThis is a test script found in ~/bin.
Why?$ ./test_command_w_variable_expansion_in_name.sh PATH = "/home/gabriel/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin" hey hey
Also, the
eval
command just below it doesn't work. If I uncomment out that line I get the exact same erroneous output as posted just above, which still doesn't execute my call togs_test_script
three times like it should. Why?