Informations

6.0 chat supprimer

6.0 chat supprimer


We are searching data for your request:

Forums and discussions:
Manuals and reference books:
Data from registers:
Wait the end of the search in all databases.
Upon completion, a link will appear to access the found materials.

6.0 chat supprimer foo /tmp/bar, cat /tmp/bar >, /tmp/foo

7.0 ./bar : aucun fichier ou répertoire de ce type

7.0 ./foo : aucun fichier ou répertoire de ce type

7.0 ./foo /tmp/bar : aucun fichier ou répertoire de ce type

7.0 ./bar /tmp/foo : aucun fichier ou répertoire de ce type

7.0 ./bar /tmp/foo /tmp/bar : aucun fichier ou répertoire de ce type

7.0

UNE:

Le comportement que vous voyez est dû à votre utilisation de la fonction de globalisation du shell. Si vous voulez que la commande cat se comporte comme vous le décrivez, vous devez explicitement effectuer une comparaison globale.

if [ "$a" = "$(echo $a | cut -f1 -d/ )" ] , alors

correspondance d'écho

autre

l'écho ne correspond pas

Fi

La commande cut permet d'effectuer une première opération de globalisation.

$ echo "foo/bar" | couper -f1 -d/

foo

$ echo "foo/bar" | couper -f1 -d/

bar

L'instruction if fonctionne ensuite pour effectuer la comparaison de globalisation et n'évalue l'expression du shell que si la globalisation correspond.

En général, les comparaisons de globalisation sont un peu plus difficiles à faire dans le shell que dans les langages de programmation plus traditionnels (Python, Ruby, etc.), et c'est une bonne idée de vérifier si vous utilisez les fonctionnalités de globalisation de manière appropriée.

UNE:

Parce que vous utilisez = pas =~ dans la condition.

Quand tu fais

a =$(écho $a | cut -f1 -d/ )

if [ "$a" = "$(écho $a | cut -f1 -d/ )" ]

alors

correspondance d'écho

autre

écho ne correspond pas

Fi

C'est comme ceci, a n'est pas égal à $(echo $a | cut -f1 -d/ ) qui n'est pas égal à la chaîne vide à cause de l'espace.

Pour résoudre ce problème, vous pouvez faire

if [ "$a" = "$(écho $a | cut -f1 -d/)" ]

alors

correspondance d'écho

autre

l'écho ne correspond pas

Fi

UNE:

a =$(écho $a | cut -f1 -d/ )

Vous devez utiliser des guillemets doubles autour du = et ajouter ] à la fin. Cela te donnerait ce que tu veux.

a =$(écho $a | cut -f1 -d/ )

if [ "$a" = "$(écho $a | cut -f1 -d/ )" ]

Si vous n'ajoutez pas le ] à la fin de votre script, alors [ "bar" = "foo/bar" ] sera évalué à true, car il pense que "bar" = "foo/" est une expression valide. La première partie ne fonctionnera pas non plus lorsque vous ajouterez le ] à la fin. Il doit être entre guillemets.

Le moyen le plus simple de lire la valeur de $a (et sa valeur à tout moment dans le script) est d'utiliser une instruction [ et case.

a =$(écho $a | cut -f1 -d/ )

cas $a dans

/foo/bar/) echo "a est 'foo/bar'", a='' ,,

*) echo "a n'est pas 'foo/bar'", a='foo/bar' ,,

esac

if [ "$a" = "$(écho $a | cut -f1 -d/ )" ]

Cela prend la valeur de $a et la vérifie par rapport à une valeur connue. Ensuite, cette instruction case remet $a à la valeur connue. Si la valeur de $a n'est pas l'une des valeurs valides, le message d'erreur s'affichera à l'écran.

En utilisant cette méthode, il n'y a aucun problème avec les guillemets simples et doubles, et cela fonctionnera correctement dans tous les cas où votre version actuelle ne fonctionne pas.

Une autre façon plus élégante de le faire est d'utiliser des extensions GNU.

if [[ "$a" = "$(écho $a | cut -f1 -d/)" ]]

La commande [[ est évaluée à true si la chaîne qu'elle donne est vide. Puisque le test est évalué sur la chaîne vide, et non sur la valeur de $a, c'est beaucoup plus efficace.


Voir la vidéo: 6 Meter Long Mercedes Maybach! (Juillet 2022).


Commentaires:

  1. Samuro

    En toute confiance, je recommande de rechercher la réponse à votre question sur google.com

  2. Tzefanyahu

    Excellente réflexion

  3. Garwin

    À mon avis, vous commettez une erreur. Je peux le prouver. Écrivez-moi dans PM.



Écrire un message

Video, Sitemap-Video, Sitemap-Videos