#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 :
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
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
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