Modifier une variable en lecture seule

Décembre 2016


Solution 1


Une variable déclarée en lecture seule ne peut pas être modifiée dans le processus en cours.
Toutefois, si la variable est exportée dans un shell fils, elle pourra être modifiée.
#!/bin/bash

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

  declare -r var

  export var
  $0 & # processus fils
else
  echo "avant $var"
  var="lami20j"
  echo "après $var"
fi

Solution 2


Une autre solution consiste à utiliser une "indirection" ou "développement indirect" (voir "man bash" pour de plus amples renseignements).
# Déclaration variable en lecture seule
$ readonly Z="Y"
$ echo $Z
Y

# Essai suppression
$ unset Z
-l: unset: Z: cannot unset: readonly variable

# Essai remplacement
$ Z=W
-l: Z: readonly variable

# Déclaration d'une variable indirecte
$ Y=W
$ echo "$Y"
W

# Développement de la variable avec une indirection
$ echo "${!Z}"
W

$

A voir également :

Ce document intitulé «  Modifier une variable en lecture seule  » issu de CommentCaMarche (www.commentcamarche.net) est mis à disposition sous les termes de la licence Creative Commons. Vous pouvez copier, modifier des copies de cette page, dans les conditions fixées par la licence, tant que cette note apparaît clairement.