Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 04/07/2014, à 20:30

Archonic

Déclaration de variable - Read Only

Bonsoir,

A-t-on le droit de ?
1. Assigner une varaible
2. La déclarer en lecture seule
3. (faire d'autres choses)
4. La déclarer en écriture autorisée

Bash semble ne pas apprécer "declare +r variable".

Est-ce que c'est normal?


Je ne fais qu'un court script pour comprendre le fonctionnement de "declare".
Voir ci-dessous pour les curieux.

declare -i IntVar1=5
declare -i IntVar2=5
declare -i IntVar3
IntVar3=IntVar1+IntVar2
echo $IntVar1 + $IntVar2 = $IntVar3
echo
echo ---------------------------------------------
echo
declare -r IntVar3
#IntVar3=$IntVar3*2
#echo $IntVar3 * 2 = $IntVar3
echo
echo ---------------------------------------------
echo
declare +r IntVar3
IntVar3=$IntVar3*2
echo $IntVar3 * 2 = $IntVar3

Et l'erreur retournée

./VarReadOnly.sh: line 29: declare: IntVar3: readonly variable
./VarReadOnly.sh: line 30: IntVar3: readonly variable

Merci

Dernière modification par Archonic (Le 04/07/2014, à 20:32)

Hors ligne

#2 Le 04/07/2014, à 21:05

Haleth

Re : Déclaration de variable - Read Only

La doc :

man bash a écrit :

Using `+' instead of `-' turns off the attribute  instead,  with
the exceptions that +a may not be used to destroy an array vari‐
able and +r will not remove the readonly attribute.


Ubuntu is an ancien African word which means "I can't configure Debian"

Because accessor & mutator are against encapsulation (one of OOP principles), good OOP-programmers do not use them. Obviously, procedural-devs do not. In fact, only ugly-devs are still using them.

Hors ligne

#3 Le 04/07/2014, à 21:07

Zakhar

Re : Déclaration de variable - Read Only

Pas essayé ça... mais c'est de toute façon une mauvaise idée d'utiliser ces "bashisms".

Ca rend ton script complètement dépendant de bash... pour une raison qui n'a pas un intérêt fondamental.

Regarde là : https://wiki.ubuntu.com/DashAsBinSh#declare_or_typeset

Tu peux utiliser à la place :
local
readonly

qui eux sont des déclarations "portables".

Après la question restera si tu déclares une variable readonly puis non readonly plus loin... mais ça s'appelle en réalité : un bug !

Si par exemple un jour tu as un NAS genre Synology ou autres, tu te féliciteras d'avoir pris garde d'écrire des scripts "portables" (encore qu'on peut toujours installer bash partout... mais ça nécessite du bricolage !).

Dernière modification par Zakhar (Le 04/07/2014, à 21:09)


"A computer is like air conditioning: it becomes useless when you open windows." (Linus Torvald)

Hors ligne

#4 Le 04/07/2014, à 21:10

Archonic

Re : Déclaration de variable - Read Only

Haleth a écrit :

La doc :

man bash a écrit :

Using `+' instead of `-' turns off the attribute  instead,  with
the exceptions that +a may not be used to destroy an array vari‐
able and +r will not remove the readonly attribute.


Bonjour,

Quelle est la source?

Voici ce que me retourne help declare.  Et on n'y parle pas de ces exceptions.
man declare ne me donne rien.

declare: declare [-aAfFgilnrtux] [-p] [name[=value] ...]
    Set variable values and attributes.
    
    Declare variables and give them attributes.  If no NAMEs are given,
    display the attributes and values of all variables.
    
    Options:
      -f	restrict action or display to function names and definitions
      -F	restrict display to function names only (plus line number and
    	source file when debugging)
      -g	create global variables when used in a shell function; otherwise
    	ignored
      -p	display the attributes and value of each NAME
    
    Options which set attributes:
      -a	to make NAMEs indexed arrays (if supported)
      -A	to make NAMEs associative arrays (if supported)
      -i	to make NAMEs have the `integer' attribute
      -l	to convert NAMEs to lower case on assignment
      -n	make NAME a reference to the variable named by its value
      -r	to make NAMEs readonly
      -t	to make NAMEs have the `trace' attribute
      -u	to convert NAMEs to upper case on assignment
      -x	to make NAMEs export
    
    Using `+' instead of `-' turns off the given attribute.
    
    Variables with the integer attribute have arithmetic evaluation (see
    the `let' command) performed when the variable is assigned a value.
    
    When used in a function, `declare' makes NAMEs local, as with the `local'
    command.  The `-g' option suppresses this behavior.
    
    Exit Status:
    Returns success unless an invalid option is supplied or a variable
    assignment error occurs.

Hors ligne

#5 Le 04/07/2014, à 21:11

Haleth

Re : Déclaration de variable - Read Only

C'est écrit : c'est le man bash


Ubuntu is an ancien African word which means "I can't configure Debian"

Because accessor & mutator are against encapsulation (one of OOP principles), good OOP-programmers do not use them. Obviously, procedural-devs do not. In fact, only ugly-devs are still using them.

Hors ligne

#6 Le 04/07/2014, à 21:13

Archonic

Re : Déclaration de variable - Read Only

Zakhar a écrit :

Pas essayé ça... mais c'est de toute façon une mauvaise idée d'utiliser ces "bashisms".


Bonsoir,

J'avais déjà pensé à cette éventualité.  Mais elle ne se pose pas en ces termes : je suis plongé dans un livre sur bash ... donc ça parle de bash ;-)

Hors ligne