Search notes:

Bash: internal variables

BASH

#!/bin/bash

echo "Path to the bash binary is:" $BASH
Github repository about-Bash, path: /variables/internal/BASH

BASH_SUBSHELL

#!/bin/bash

echo $BASH_SUBSHELL


(
  echo $BASH_SUBSHELL
  (
    echo $BASH_SUBSHELL
  )
)
Github repository about-Bash, path: /variables/internal/BASH_SUBSHELL

BASH_VERSINFO

#!/bin/bash

vers_major=${BASH_VERSINFO[0]}
vers_minor=${BASH_VERSINFO[1]}
patch_level=${BASH_VERSINFO[2]}
build_version=${BASH_VERSINFO[3]}
release_status=${BASH_VERSINFO[4]}
architecture=${BASH_VERSINFO[5]}

echo '$BASH_VERSINFO[n]:' "$vers_major.$vers_minor.$patch_level($build_version)-$release_status $architecture"
echo '$BASH_VERSION:    ' $BASH_VERSION

Github repository about-Bash, path: /variables/internal/BASH_VERSINFO

BASH_VERSION

#!/bin/bash

# Compare with ./BASH_VERSINFO

echo $BASH_VERSION
Github repository about-Bash, path: /variables/internal/BASH_VERSION

BASHPID

#!/bin/bash

echo '$$:      ' $$
echo '$BASHPID:' $BASHPID


(
  echo
  echo "Subshell..."
  echo '$$:      ' $$
  echo '$BASHPID:' $BASHPID

  ps -ef | grep $BASHPID
)
Github repository about-Bash, path: /variables/internal/BASHPID

DIRSTACK

#!/bin/bash

echo
echo $DIRSTACK

pushd .. > /dev/null
echo
echo $DIRSTACK
 
popd > /dev/null
echo
echo $DIRSTACK
Github repository about-Bash, path: /variables/internal/DIRSTACK

EUID

#!/bin/bash

echo '$EUID: ' $EUID
grep $EUID  /etc/passwd
Github repository about-Bash, path: /variables/internal/EUID

FUNCNAME

#!/bin/bash

baz() {
  echo "$FUNCNAME was called"
}
bar() {
  echo "$FUNCNAME was called"
  baz
}
foo() {
  echo "$FUNCNAME was called"
  bar
}

foo
Github repository about-Bash, path: /variables/internal/FUNCNAME

GROUPS

#!/bin/bash

echo '$GROUPS: ' $GROUPS
grep $GROUPS /etc/group
Github repository about-Bash, path: /variables/internal/GROUPS

HOME

#!/bin/bash

echo '$HOME: ' $HOME
echo '~:     ' ~
Github repository about-Bash, path: /variables/internal/HOME

HOSTNAME

#!/bin/bash

echo '$HOSTNAME: ' $HOSTNAME
Github repository about-Bash, path: /variables/internal/HOSTNAME

HOSTTYPE

#!/bin/bash

echo '$HOSTTYPE: ' $HOSTTYPE
echo "see also \$MACHTYPE ($MACHTYPE)"
Github repository about-Bash, path: /variables/internal/HOSTTYPE

IFS

IFS is the internal field separator. The shell uses its value to determine word boundaries, that is, $IFS can be used to specify how words need to be split.
#!/bin/bash


#
# The default value of $IFS consists of a space,
# a tabulator and a new line.
# This can be shown with 'cat -A' which prints ^I for
# a tabulator and $ for a new linw
#
echo ">$IFS<" | cat -A
echo

# --------------------------------------------------------------
#
# Setting the IFS variable to specific character splits words
# on this character


IFS=:

for word in "one:two::three"; do
   printf "word: %s\n" $word
done
echo

# This can of course be used to decompose the individual
# paths in $PATH
for path in $PATH; do
  echo path=$path
done
echo

# --------------------------------------------------------------
#
# If IFS is set to +, the plus is "removed" (or split away) in
# an echo statement

IFS=+

var_plus='foo+bar+baz'
var_minus='foo-bar-baz'

echo $var_plus
echo $var_minus

echo
# --------------------------------------------------------------
#
# The space in IFS splits on one or more spaces.

IFS=" "

for word in "abc def     ghijk"; do
   printf "word: %s\n" $word
done
Github repository about-Bash, path: /variables/internal/IFS

IGNOREEOF

#!/bin/bash

# how many end-of-files (control-D) the shell will ignore before logging out.
echo $IGNOREEOF
Github repository about-Bash, path: /variables/internal/IGNOREEOF

LC_COLLATE

TODO: Compare with the environment variable LC_COLLATE

LC_CTYPE

LINENO

#!/bin/bash


func() {

  echo "I am in $FUNCNAME @ $LINENO"

}

echo "Line: $LINENO"

func

echo "Line: $LINENO"
Github repository about-Bash, path: /variables/internal/LINENO

MACHTYPE

#!/bin/bash

echo '$MACHTYPE:' $MACHTYPE
Github repository about-Bash, path: /variables/internal/MACHTYPE

OLDPWD

#!/bin/bash

echo "PWD   :" $PWD
echo "OLDPWD:" $OLDPWD

cd ..
echo
echo "PWD   :" $PWD
echo "OLDPWD:" $OLDPWD

cd ..
echo
echo "PWD   :" $PWD
echo "OLDPWD:" $OLDPWD
Github repository about-Bash, path: /variables/internal/OLDPWD

OSTYPE

#!/bin/bash

if   [[ "$OSTYPE" == "linux-gnu" ]]; then
   #
         echo "Yeah!"
   #
if   [[ "$OSTYPE" == "linux-android" ]]; then
   #
         echo "termux"
   #
elif [[ "$OSTYPE" == "darwin"* ]]; then
   #
         echo "Mac OSX"
   #
elif [[ "$OSTYPE" == "cygwin" ]]; then
   #
         echo "POSIX environment emulation for Windows"
   #
elif [[ "$OSTYPE" == "msys" ]]; then
   #
         echo "Shell for MinGW"
   #
elif [[ "$OSTYPE" == "win32" ]]; then
   # 
   #     Can OSTYPE ever be win32?
         echo "Windows"
   #
elif [[ "$OSTYPE" == "freebsd" ]]; then
   #
         echo "Hm...???"
   #
elif [[ "$OSTYPE" == "openbsd" ]]; then
   #
         echo "Hm...???"
   #
elif [[ "$OSTYPE" == "solaris" ]]; then
   #
         echo "Well..."
   #
elif [[ "$OSTYPE" == "haiku" ]]; then
   #
         echo "Well, well, well, the cat fell in the well"
   #
else
   #
         echo "Unknown OSTYPE $OSTYPE"
   #
fi
Github repository about-Bash, path: /variables/internal/OSTYPE
See also uname -o and /proc/sys/kernel/ostype.

PATH

#!/bin/bash

echo $PATH
Github repository about-Bash, path: /variables/internal/PATH

PIPESTATUS

PPID

#!/bin/bash

echo '$$:  '  $$
echo '$PPID:' $PPID

ps -ef | grep $$
Github repository about-Bash, path: /variables/internal/PPID
The parent process id of a given process id can be queried in a shell with
$ ps -o ppid= 42

PROMPT_COMMAND

PS1

PS2

PS3

PS4

PWD

#!/bin/bash

echo $PWD
Github repository about-Bash, path: /variables/internal/PWD

SECONDS

func() {
  echo "This script has been running since $SECONDS second(s)"
}

func
sleep 1
func
sleep 2
func
sleep 3
func

# Output:
#
# This script has been running since 0 second(s)
# This script has been running since 1 second(s)
# This script has been running since 3 second(s)
# This script has been running since 6 second(s)
Github repository about-Bash, path: /variables/internal/SECONDS

SHELLOPTS

#!/bin/bash

echo $SHELLOPTS
Github repository about-Bash, path: /variables/internal/SHELLOPTS

SHLVL

#!/bin/bash

printf "%${SHLVL}s\n" $SHLVL

if [ $SHLVL -ge 10 ]; then
  echo "          SHLVL has reached 10, not recursing anymore"
else
  ./SHLVL
fi

printf "%${SHLVL}s\n" $SHLVL
Github repository about-Bash, path: /variables/internal/SHLVL

TMOUT

UID

#!/bin/bash

echo '$UID: ' $UID
grep $UID /etc/passwd
Github repository about-Bash, path: /variables/internal/UID

See also

bash - variables

Index