Home > Back-end >  $BASH_VERSION vs /usr/bin/env
$BASH_VERSION vs /usr/bin/env

Time:04-27

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.

  • Related