I run this to check env:
env | grep bash
and then got nothing.
So, I think the variable bash
is not set in env. However, in a shell script file:
#!/usr/bin/env bash
echo $BASH_VERSION
I got 5.1.16(1)-release
.
It seems contradictory because, on the one hand, I think the variable bash
must have been set as the shell script file can be executed in a manner as expected; on the other hand, running env | grep bash
, I got nothing.
How could the OS locate the app bash-5.1.16 without an env variable being set?
CodePudding user response:
The $BASH_VERSION
is not an environment variable but a shell variable.
You can see defined shell variable with the declare
builtin.
declare | grep BASH_VERSION
BASH_VERSION='5.1.4(1)-release'
The env
program is used to run a program with modified environment.
Running /usr/bin/env bash
without arguments is basically the same as running bash
, it's ensure that the program is on the file system and not a shell builtin.