Modificar uma variável em leitura somente

Fevereiro 2017


Solução 1


Uma variável declarada em leitura somente não pode ser modificada no processo em andamento.
Porém, se a variável é exportada em um shell filho, ela poderá ser modificada.
#!/bin/bash 

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

  declare -r var 

  export var 
  $0 & # processus fils 
else 
  echo "antes $var" 
  var="lami20j" 
  echo "depois $var" 
fi

Solução 2


Outra solução consiste em usar uma "indireção" ou "desenvolvimento indireto" (veja "man bash" para mais amplas informações ).
# Declaração variável em leitura somente  
$ readonly Z="Y" 
$ echo $Z 
Y 

# Teste supressão 
$ unset Z 
-l: unset: Z: cannot unset: readonly variable 

# Teste de substitução 
$ Z=W 
-l: Z: readonly variable 

# Declaração de uma variável indireta  
$ Y=W 
$ echo "$Y" 
W 

# Desenvolvimento da variável com uma indireção  
$ echo "${!Z}" 
W 

$

Tradução feita por Ana Spadari

Veja também

Artigo original publicado por . Tradução feita por ninha25. Última modificação: 19 de agosto de 2011 às 07:44 por ninha25.
Este documento, intitulado 'Modificar uma variável em leitura somente ', está disponível sob a licença Creative Commons. Você pode copiar e/ou modificar o conteúdo desta página com base nas condições estipuladas pela licença. Não se esqueça de creditar o CCM (br.ccm.net) ao utilizar este artigo.