Jeg har et script, der tager en mulighed for server puljer til at køre script imod. Indstillingen er givet som en kommasepareret liste (dvs.-p 201.204.301).
Jeg bruger eval og tandbøjle ekspansion for at få dem pool numre i et array. Det fungerer fint, medmindre kun 1 pool er angivet. Her er koden:
Code:
while [ "$1" != "" ]; do
case $1 in
-p ) shift
pools=($(for i in $(eval echo {$1}); do echo $i; done | sort))
;;
Hvis flere puljer givet:
Code:
[me@server bin]$ ./project_nunenhoffen.sh -p 201,202
+ '[' -p '!=' '' ']'
+ case $1 in
+ shift
+ pools=($(for i in $(eval echo {$1}); do echo $i; done | sort))
++ sort
+++ eval echo '{201,202}'
++++ echo 201 202
++ for i in '$(eval echo {$1})'
++ echo 201
++ for i in '$(eval echo {$1})'
++ echo 202
+ shift
+ '[' '' '!=' '' ']'
Hvis én pulje givet:
Code:
[me@server bin]$ ./project_nunenhoffen.sh -p 201
+ '[' -p '!=' '' ']'
+ case $1 in
+ shift
+ pools=($(for i in $(eval echo {$1}); do echo $i; done | sort))
++ sort
+++ eval echo '{201}'
++++ echo '{201}'
++ for i in '$(eval echo {$1})'
++ echo '{201}'
+ shift
+ '[' '' '!=' '' ']'
Så hvis en enkelt pool findes det forlader parenteser omkring det der er dårlig. Jeg kunne lave en test af $ 1 for at se, om der er nogen kommaer og behandle det anderledes, hvis der ikke er, men jeg tænkte, om der er en bedre løsning end det. Også tænkte, om hvordan jeg håndteres få puljen numre i et array var den bedste måde at gøre det (eval & tandbøjle ekspansion).
Tak,
Mike G.