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
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.
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.
*
viene espanso per corrispondere a tutti i file nella directory corrente (questo è chiamato "globbing"). Devi citare o scappare *, o usare un simbolo diverso.
*
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.
* 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
L'applicazione "calc", che è possibile recuperare dal deb repository apt-get install calc può valutare 3 * 3 ma non 3 * 3
Prova scampo, l'asterisco è un carattere speciale in C
Cambia * in \ *
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
+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. –
- 1. MVC sulla riga di comando
- 2. Visualizzazione di "Canopy" sulla riga di comando
- 3. Imparare Weka sulla riga di comando
- 4. Grails si blocca sulla riga di comando
- 5. Come utilizzare aspell sulla riga di comando
- 6. Filtraggio Logcat registri sulla riga di comando
- 7. Forza l'avvio nella riga di comando di Linux
- 8. Come posso trovare un file/directory che possa essere ovunque sulla riga di comando di Linux?
- 9. Appare l'output del comando sulla riga singola
- 10. Continua un comando sulla riga successiva
- 11. Generazione di uno sha256 dalla riga di comando di Linux
- 12. Riga di comando di Windows Equivale a "time" in Linux?
- 13. Parametri della riga di comando di Linux 64 in Assembly
- 14. RTMP: Esiste uno strumento da riga di comando di Linux?
- 15. importare le preferenze di eclissi sulla riga di comando
- 16. Uscita Unicode sulla riga di comando di Windows?
- 17. Esporta etichette di pagine PDF sulla riga di comando
- 18. Disabilitazione dei controlli di chiave esterna sulla riga di comando
- 19. Unione di conflitti mercuriali sulla riga di comando?
- 20. Specifica delle directory di inclusione sulla riga di comando cmake
- 21. Chrome controllo da riga di comando su Linux?
- 22. Eseguire tre comandi in un'unica riga di comando in Linux
- 23. Punto e virgola su riga di comando in linux
- 24. tabella troncata tramite riga di comando in Linux
- 25. Generatore Sitemap per riga di comando Linux: Qualche suggerimento?
- 26. Creare una "GUI" Linux nella riga di comando
- 27. Compilare il programma IOS dalla riga di comando linux
- 28. passare argomenti a javascript tramite cscript sulla riga di comando
- 29. Trova e sostituisci più file sulla riga di comando
- 30. Come registrare le allocazioni con JFR sulla riga di comando?
O: eseguito sempre in una directory vuota :) –
Idea interessante. Potrebbe essere commercializzato come una directory * di calcolo dedicata *. O forse un * ambiente di calcolo sicuro *. :-) – wallyk
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