2010-02-09 17 views
5

Estoy haciendo una pequeña calculadora en C, y quiero pasar fórmulas aritméticas simples a mi programa. Pero realmente no me gusta que le pase el carácter '*' a mi programa. ¿Por qué no? ¿Y cómo puedo evitar esto sin cambiar el asterisco a otra cosa? Gracias* en la línea de comandos de linux

Respuesta

9

El carácter * es el activador del shell para expandir los nombres de archivo coincidentes.

Hay varias maneras de tratar con él:

  • escapar de ella al escribir mycalc 5 \* 3
  • Lugar toda la expresión entre comillas y asegúrese de que el analizador de la calculadora funciona de esa manera: myprog "5 * 3"
  • no hacer use la línea de comando: use su propia entrada en su lugar.
+3

O: siempre se ejecutan en un directorio vacío :) –

+2

idea interesante. Se puede comercializar como un * directorio de cálculo dedicado *. O tal vez un * entorno de cálculo seguro *. :-) – wallyk

+0

Depende del caparazón. Mientras Bash, de forma predeterminada, deja un globo sin expandir si no coincide con nada, se puede configurar para eliminar un globo ('shopt -s nullglob') o fallar el comando completo (' shopt -s failglob').En otros shells, 'tcsh' por ejemplo, el último comportamiento es el predeterminado. – ephemient

3

El shell de comandos de Linux (bash, tcsh, ksh, lo que sea) ampliará el '*' en una lista de archivos antes de que el programa lo vea. Hay muy poco que puede hacer al respecto: puede hacer que los usuarios pongan el asterisco entre comillas simples, o que lo salten con una barra invertida, o que usen 'x'. Ninguno es particularmente fácil de usar.

7

* se expande para que coincida con todos los archivos en el directorio actual (esto se llama "globbing"). Debe citar o escapar del *, o usar un símbolo diferente.

1

* evalúa como "todo en el directorio actual" bajo bash. Sin embargo, . funciona correctamente y se usa a menudo como un símbolo para la multiplicación en matemáticas, específicamente la multiplicación escalar.

6

* invocará globbing y ampliar a todos los archivos en el directorio que se encuentre. Sólo citar el * y ejecutar su programa como

./yourprogram '10 * 10'

o

./yourprogram 10 '*' 10

Con el primer caso, su programa pasará solo 1 argumento, argv [1] será la cadena "10 * 10", el segundo caso obtendrá 3 argumentos

0

La aplicación "calc" que se puede recuperar de deb repositorios apt-get install Calc puede evaluar 3 * 3, pero no 3 * 3

-1

Trate escapar de ella, el asterisco es un carácter especial en C

Cambiar * a \ *

2

Una última técnica no mencionada. Insteead de citar/escapar de cada uso, puedes desactivar el globbing. De esta manera, si desea utilizar la calculadora mucho, usted no tiene que escapar de cada uso:

# For bash 
set -o noglob 

# For csh/tcsh 
set noglob 

# Now that noglob is set, you can safely use * 
calc 3 * 3 
+0

+1 - Es mejor ejecutar 'calc' en una secuencia de comandos envoltorio para que el usuario pueda disfrutar de una entrada de lenguaje más natural. También es muy útil cuando se conecta la entrada desde un archivo. –

Cuestiones relacionadas