Como inserir estrela * dentro de uma string no shell

1

Como posso incluir * dentro de uma string?

Aqui está o meu código:

#!/bin/bash
# This is a simple calculator using select statement
echo -n 'Insert 1st operand: '
read first
echo -n 'Insert 2nd operand: '
read second
echo 'Select an operator:'
operators="+ - * /"
select op in $operators
do let "result=${first}${op}${second}"
   break
done
echo -e "Result = $result"

Quando executo esse código, * listará todos os arquivos no diretório atual como select choices. Eu tentei escapar com \* mas não funciona.

    
por Eng.Fouad 05.10.2011 / 20:32

3 respostas

3

O deve expandir seus parâmetros. Mas então select expande seus parâmetros também. O shell expande \* para apenas * , o que não ajuda, pois select expande esse * . Você precisa de algo que se expanda para \* , o que seria \* .

Como alternativa, use apenas:
select op in + - \* /;
ou: select op in "$operators"

    
por 05.10.2011 / 20:58
1

Primeiro, você pode colocar $ operador com aspas duplas para ter certeza de que não há interpretação. Selecione exibir corretamente a lista de parâmetros BTW o final do código não funciona como esperado: ele exibe o primeiro e o segundo operando, mas não o operador

    
por 05.10.2011 / 20:58
0

Matrizes ajudam bastante em scripts de shell quando você tem dificuldade em usar uma string que você construiu dinamicamente.

$ operators=( + - '*' / )
$ PS3="choice? "
$ select o in "${operators[@]}"; do echo "$o $REPLY"; done
1) +
2) -
3) *
4) /
choice? 1
+ 1
choice? 2
- 2
choice? 3
* 3
choice? 4
/ 4
    
por 05.10.2011 / 21:29