Modifying a read-only variable

December 2016






Solution 1


A variable declared as read-only can not be modified during outgoing process.
But if the variable is exported in a child shell it may be modified.

#!/bin/bash

if [ "$PROC_PID" != "$PPID" ]; then
  export PROC_PID=$$
  var="mype"
  echo "initial $var"

  declare -r var

  export var
  $0 & # child process 
else
  echo "before $var"
  var="netty5"
  echo "after $var"
fi

Solution 2


Making use of indirect development.

# Declaration of read-only Variable
$ readonly Z="Y"
$ echo $Z
Y

# Suppression test 
$ unset Z
-l: unset: Z: cannot unset: readonly variable

# Replacement test
$ Z=W
-l: Z: readonly variable

# Declaration of an indirect variable
$ Y=W
$ echo "$Y"
W

# Development of variable with indirection
$ echo "${!Z}"
W

$

Related :

This document entitled « Modifying a read-only variable » from CCM (ccm.net) is made available under the Creative Commons license. You can copy, modify copies of this page, under the conditions stipulated by the license, as this note appears clearly.