Table of Contents
In this article, we will see how to declare a variable read only in Linux Bash Shell scripting. Like in many other programming and scripting languages there might be a situation in Linux bash shell scripting as well where you need to declare a variable as read only so that value assigned to it cannot be changed. In other words, you need to protect the read only variable from getting overridden. While there are many ways to protect the read only variable in Linux but here we will only discuss the most frequently and famous methods used that can be easily used with terminal as well as from the bash shell scripting.
How to declare a variable read only in Linux Bash Shell Scripting
Also Read: 7 Bash Shell Scripts Every Linux Administrators Should Know About
If you are looking to declare a variable as read only in Linux then there are few methods that you can think of using here. We will see all the methods one by one in great detail with the help of example.
Method 1: Using readonly command
The first method that you can think of using is through readonly command where a variable declared with a value assigned can be changed to different value. This can be better understood with an example. Suppose you have declared a variable called color
with value red
assigned to it as shown below.
cyberithub@ubuntu:~$ readonly color=red
Now if you check the value of color variable using echo $color
, you can see red
on the output.
cyberithub@ubuntu:~$ echo $color red
Next if you try to assign some other value like yellow
to color
variable using below set command. Then it won't be assigned.
cyberithub@ubuntu:~$ set color=yellow
This can be confirmed by again checked the value assigned to color variable using echo $color
command. You will notice that color
variable still contains the old value red
.
cyberithub@ubuntu:~$ echo $color red
You can even verify by unsetting the old value from color
variable using unset color
command. You will notice -bash: unset: color: cannot unset: readonly variable
message on the output. This confirms that color
variable is read only and hence the assigned value cannot be changed.
cyberithub@ubuntu:~$ unset color -bash: unset: color: cannot unset: readonly variable
Method 2: Using typeset command
Another method that can be used is through typeset command. You just need to use typeset -r <var>=<value>
syntax. You can declare a variable called color
with value red
assigned to it using typeset -r color=red
command.
cyberithub@ubuntu:~$ typeset -r color=red
Then you can check the value assigned using echo $color
command.
cyberithub@ubuntu:~$ echo $color red
Now if you try to change the value to yellow
then you can notice that it is throwing -bash: typeset: color: readonly variable
message on the output. This confirms that color is a read only variable.
cyberithub@ubuntu:~$ typeset -r color=yellow -bash: typeset: color: readonly variable
Method 3: Using declare command
Last method is through the use of declare
command where you can assign a value to a variable and declare it read only. The syntax that you need to use is declare -r <variable>=<value>
. This can be better understood with the help of an example. Here we are setting the value of a variable color
is equal to red
as shown below.
cyberithub@ubuntu:~$ declare -r color=red
You can check the value assigned to color
variable by using echo $color
command as shown below.
cyberithub@ubuntu:~$ echo $color red
Now if you try to set the value to yellow
then you will get below shown error.
cyberithub@ubuntu:~$ declare -r color=yellow -bash: declare: color: readonly variable
This confirms that variable color
is now defined as read only variable whose value cannot be changed. You can also check the type of color
variable by simply using declare -p color
command as shown below.
cyberithub@ubuntu:~$ declare -p color declare -r color="red"
If you use declare -p
without any argument then you will see all the declared variables as shown below.
cyberithub@ubuntu:~$ declare -p
declare -- BASH="/bin/bash"
declare -r BASHOPTS="checkwinsize:cmdhist:complete_fullquote:expand_aliases:extglob:extquote:force_fignore:globasciiranges:histappend:interactive_comments:login_shell:progcomp:promptvars:sourcepath"
declare -i BASHPID
declare -A BASH_ALIASES=()
declare -a BASH_ARGC=([0]="0")
declare -a BASH_ARGV=()
declare -- BASH_ARGV0
declare -A BASH_CMDS=()
declare -- BASH_COMMAND
declare -a BASH_COMPLETION_VERSINFO=([0]="2" [1]="10")
declare -a BASH_LINENO=()
declare -a BASH_SOURCE=()
declare -- BASH_SUBSHELL
declare -ar BASH_VERSINFO=([0]="5" [1]="0" [2]="17" [3]="1" [4]="release" [5]="x86_64-pc-linux-gnu")
declare -- BASH_VERSION="5.0.17(1)-release"
declare -- COLUMNS="157"
declare -- COMP_WORDBREAKS
declare -x CONDA_EXE="/home/cyberithub/miniconda3/bin/conda"
declare -x CONDA_PYTHON_EXE="/home/cyberithub/miniconda3/bin/python"
declare -x CONDA_SHLVL="0"
..................................................