2010-02-09 30 views
5

Sto facendo una piccola calcolatrice in C, e voglio passare semplici formule aritmetiche al mio programma. Ma non mi piace davvero che io passi il personaggio '*' al mio programma. Perché no? E come posso aggirare questo senza cambiare l'asterisco in qualcos'altro? Grazie* sulla riga di comando linux

risposta

9

Il carattere * è il trigger della shell per l'espansione dei nomi di file corrispondenti.

Ci sono diversi modi per affrontare con esso:

  • sfuggire durante la digitazione mycalc 5 \* 3
  • Posizionare l'intera espressione tra virgolette e assicurarsi che parser della calcolatrice funziona in questo modo: myprog "5 * 3"
  • Non usa la riga di comando: usa invece il tuo input.
+3

O: eseguito sempre in una directory vuota :) –

+2

Idea interessante. Potrebbe essere commercializzato come una directory * di calcolo dedicata *. O forse un * ambiente di calcolo sicuro *. :-) – wallyk

+0

Dipende dalla shell. Mentre Bash, per impostazione predefinita, lascia un glob non espanso se non corrisponde a nulla, può essere configurato per rimuovere un glob ('shopt -s nullglob') o fallire l'intero comando (' shopt -s failglob').In altre shell, ad esempio 'tcsh', l'ultimo comportamento è il default. – ephemient

3

La shell di comandi Linux (bash, tcsh, ksh, qualunque sia) espanderà il '*' in un elenco di file prima ancora che il programma lo veda. C'è ben poco che si possa fare in proposito: si potrebbe fare in modo che gli utenti inseriscano l'asterisco tra virgolette singole, o sfugga con una barra rovesciata, o invece usi 'x'. Nessuno è particolarmente facile da usare.

7

* viene espanso per corrispondere a tutti i file nella directory corrente (questo è chiamato "globbing"). Devi citare o scappare *, o usare un simbolo diverso.

1

* valuta "tutto nella directory corrente" in bash. Tuttavia, . funziona correttamente ed è spesso utilizzato come simbolo per la moltiplicazione in matematica, in particolare per la moltiplicazione scalare.

6

* richiamerà globbing ed espandere a tutti i file nella directory vi trovate. Basta citare il * ed eseguire il programma come

./yourprogram '10 * 10'

o

./yourprogram 10 '*' 10

Con Nel primo caso, il tuo programma riceverà solo 1 argomento, argv [1] sarà la stringa "10 * 10", nel secondo caso avrai 3 argomenti passati

0

L'applicazione "calc", che è possibile recuperare dal deb repository apt-get install calc può valutare 3 * 3 ma non 3 * 3

-1

Prova scampo, l'asterisco è un carattere speciale in C

Cambia * in \ *

2

Un'ultima tecnica non menzionata. Prima di quotare/sfuggire a ogni utilizzo, è possibile disattivare il globbing. In questo modo, se si desidera utilizzare la calcolatrice molto, non c'è bisogno di fuggire ogni 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 - È meglio eseguire "calc" in uno script wrapper in modo che l'utente possa godere di un input più naturale della lingua. Molto utile anche quando si piping l'input da un file. –

Problemi correlati