$ bash -c 'echo $0 ' foo
foo
$ bash -c 'echo $0 '
bash
From bash manual
($0) Expands to the name of the shell or shell script. This is set at shell
initialization.If Bash is invoked with a file of commands (see Section 3.8 [Shell
Scripts], page 39), $0 is set to the name of that file.If Bash is started with the
-c option (see Section 6.1 [Invoking Bash], page 80), then $0 is set to the first argument after the string to be executed, if one is
present.Otherwise, it is set to the filename used to invoke Bash, as given by argument zero.
What does "otherwise" mean?
What cases does it include?
Does it include the case when bash is started with -c without any "argument after the string to be executed"?
I expected bash -c 'echo $0 '
not to output anything, according to the second case in the quote, but it outputs bash
.
Thanks.
Best Answer
The documentation you quote gives three cases:
(case 1)
(case 2; note the two "if"s, which must both be satisfied in this case)
(case 3).
The "otherwise" clause covers any situation which isn't covered by cases 1 and 2:
bash
isn't invoked with a file of commands, andbash
isn't started with the-c
option, or it's started with the-c
option but without any argument after the string to be executed.So yes, it includes the case where Bash is started with
-c
without any argument after the string to be executed. It also includes the basicecho $0
case when run from an interactive shell, since the interactive shell was most likely started without either a file of commands or a-c
option.