Le problème de * dans l'argument de la ligne de commande
J'ai écrit un programme en Java qui accepte les entrées via les arguments de ligne de commande.
Je reçois une entrée de deux chiffres et d'un opérateur à partir de la ligne de commande.
Pour multiplier deux nombres, je dois donner d'entrée comme par exemple 5 3 *
, mais il ne fonctionne pas comme écrit.
Pourquoi n'est-il pas accepter *
à partir de la ligne de commande?
source d'informationauteur Nithismiles
Vous devez vous connecter pour publier un commentaire.
C'est parce que
*
est une coquille générique: il a une signification particulière pour le shell, qui s'étend, elle, avant de la transmettre à la commande (dans ce cas,java
).Car vous avez besoin d'un littéral
*
vous devez vous échapper de la coquille. La façon exacte d'échapper varie en fonction de votre shell, mais vous pouvez essayer:Ou:
Par ailleurs, si vous voulez savoir ce que le shell ne avec le
*
essayez d'imprimer le contenu deString[] args
à votremain
méthode. Vous trouverez qu'il contiendra les noms des fichiers dans votre répertoire.Cela peut être très pratique si vous devez passer certains noms de fichiers comme arguments de ligne de commande.
Voir aussi
Wikipédia: glob
Wikipédia: caractère d'Échappement
* a une signification spéciale dans la coquille de l'interprète. Comment obtenir un * est littéralement en fonction de ce shell interprète que vous utilisez. Pour Bash, vous devriez mettre des guillemets simples autour de l' *, c'est à dire '*', au lieu de guillemets comme "*".
Essayer environnant les
*
avec des citations comme"*"
. L'étoile est réservé symbole sur la ligne de commande.Sous MS WINDOWS, pas tout à fait vrai: "java.exe" en silence, se développe arguments de ligne de commande avec les jokers
mais seulement dans la dernière composante, donc
ne fonctionne pas comme vous l'attendez.
Il ignore également les entrées "." et "..", mais ne fait l'honneur d'autres noms de fichiers commençant par ".".
Pour éviter les malentendus: Si je regarde la ligne de commande de l'exécution de processus JAVA avec PROCEXP, je vois le non développés args!
Je n'ai trouvé aucun moyen de contourner cela. En d'autres termes: tant Que vous avez au moins un fichier ou d'un répertoire dans le répertoire courant, "java Calc 3 * 7" ne fonctionnera PAS!
C'est TRÈS laid, et semble avoir toujours été là, dans toutes les versions de JRE jusqu'à et y compris Java 8.
Quelqu'un a une idée de comment faire pour désactiver Java méchant de la ligne de commande de l'expansion?
Utilisation apostrophes:
Cela fonctionne avec la plupart des populaires shells (bash et ksh).