![]() |
|
|
google unix.com
|
|||||||
| Fóruns | Registar | Fórum Regimento | Ligações | Álbuns | FAQ | Lista deputados | Calendário | Pesquisa | Today's Posts | Mark Forums Read |
| Programação Shell Script e Post perguntas sobre ksh, CSH, SH, BASH, Perl, PHP, SED, Awk e outros scripts shell e shell scripts línguas aqui. |
Mais UNIX e Linux Fórum Tópicos Você pode achar Helpfull
|
||||
| Fio | Thread Starter | Fórum | Respostas | Última postagem |
| bash - retardar expansão da variável | scandora | Programação Shell Script e | 3 | 02-18-2009 05:59 |
| globbing, $ # é demasiado elevado após curinga expansão em bash script | zoo591 | Programação Shell Script e | 3 | 07-25-2008 03:50 |
| Padrão expansão problema | njoshi | Programação Shell Script e | 5 | 04-24-2007 01:28 |
| AIX Expansão CD | almuwatta | AIX | 0 | 06-23-2005 06:07 |
| ksh no HP-UX - variável expansão | dangral | UNIX para Dummies Perguntas & Respostas | 4 | 02-08-2005 12:35 |
![]() |
|
|
Linkback | Thread Tools | Pesquisar este Thread | Rate Thread | Display Modes |
|
|
|
||||
|
Brace expansão problema no Bash
Eu tenho um script que tem uma opção para servidor piscinas para executar o script contra. A opção é dado como uma lista separada por vírgulas (ou seja, p-201204301). Estou usando o eval e expansão braçadeira para obter os números de piscina em um array. Ele trabalha bem menos que apenas 1 piscina número é dado. Aqui está o código: Código:
while [ "$1" != "" ]; do
case $1 in
-p ) shift
pools=($(for i in $(eval echo {$1}); do echo $i; done | sort))
;;
Se várias piscinas dado: Código:
[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
+ '[' '' '!=' '' ']'
Se único agrupamento indicados: Código:
[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
+ '[' '' '!=' '' ']'
Portanto, se um único agrupamento é dado deixa as chavetas à volta dela, que é ruim. Eu poderia fazer um teste de US $ 1 para ver se há qualquer vírgulas e processá-lo diferente, caso não existam, mas eu estava me perguntando se há uma solução melhor do que isso. Também me perguntava se eu tratadas como obter os números de piscina em um array foi a melhor maneira de fazê-lo (eval & braçadeira expansão). Obrigado, Mike G. |
|
||||
|
Citação:
Por agora tenho o meu problema resolvido desta maneira: Código:
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
;;
|
![]() |
| Marcadores |
| Thread Tools | Pesquisar este Thread |
| Display Modes | Esta taxa Thread |
|
|