![]() |
|
|
google unix.com
|
|||||||
| Forum | Registrera | Forum Regler | Länkar | Album | FAQ | Medlemslista | Kalender | Söka | Dagens inlägg | Markera forum som lästa |
| Shell-programmering och Skript Post frågor om ksh, CSH, SH, bash, PERL, PHP, sed, awk och andra skalskript och skal skriptspråk här. |
Mer UNIX och Linux Forum Ämnen Du kan hitta Helpful
|
||||
| Tråd | Thread Starter | Forum | Svar | Senaste Inlägg |
| bash - fördröja utbyggnaden av variabel | scandora | Shell-programmering och Skript | 3 | 02-18-2009 05:59 |
| globbing, $ # är för hög efter wildcard expansion i bash script | zoo591 | Shell-programmering och Skript | 3 | 07-25-2008 03:50 |
| Mönster expansion problem | njoshi | Shell-programmering och Skript | 5 | 04-24-2007 01:28 |
| AIX Expansion CD | almuwatta | AIX | 0 | 06-23-2005 06:07 |
| ksh om HP-UX - variabel expansion | dangral | UNIX for Dummies Frågor & Svar | 4 | 02-08-2005 12:35 |
![]() |
|
|
LinkBack | Thread Tools | Sök i denna tråd | Rate Thread | Visningslägen |
|
|
|
||||
|
Brace expansion problem i Bash
Jag har ett script som tar en alternativ för-pooler för att köra skript emot. Alternativet ges som en kommaseparerad lista (dvs.-p 201.204.301). Jag använder eval och stag expansion för att få dem pool nummer i en matris. Det fungerar bra om inte bara 1 pool angivits. Här är koden: Kod:
while [ "$1" != "" ]; do
case $1 in
-p ) shift
pools=($(for i in $(eval echo {$1}); do echo $i; done | sort))
;;
Om flera pooler ges: Kod:
[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
+ '[' '' '!=' '' ']'
Om enda pool ges: Kod:
[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å om en enda pool finns det lämnar klammerparenteserna runt det som är dåligt. Jag kunde göra ett test på $ 1 för att se om det finns några kommatecken och behandla det annorlunda om det inte men jag undrar om det finns en bättre lösning än så. Dessutom undrar om hur jag hanterade få poolen siffror i en rad var det bästa sättet att göra det (eval & stag expansion). Tack, Mike G. |
|
||||
|
Citat:
För nu har jag löst mitt problem på detta sätt: Kod:
while [ "$1" != "" ]; do
case $1 in
-p ) shift
case $1 in
*,* ) pools=( $(for i in $(eval echo {$1}); do echo $i; done | sort) ) ;;
* ) pools=$1 ;;
esac
;;
|