2 votes

bash echo exécute la commande au lieu de l'imprimer

J'ai une commande bash simple que je dois mettre dans le shell :

 `for f in $(ls); do echo "File -> $f"; done`

Ce que je reçois est :

-bash: File: command not found

Je ne comprends pas pourquoi bash essaie d'exécuter l'instruction echo au lieu de l'imprimer...

3voto

jaypal Points 34440

Vous ne devrait pas l'être l'analyse syntaxique réelle ls pour ça. Fais quelque chose comme :

for f in *; do echo "File -> $f"; done

Pour les répertoires :

for i in *; do if [ -d $i ]; then  echo "File -> $i"; fi ; done

o

find . -type d -exec echo '{}' \;

3voto

William Pursell Points 56211

Les backticks provoquent l'exécution. La commande contenue dans les backtiks produit une chaîne de caractères, et les backticks exécutent cette chaîne comme une commande.

2voto

David Foerster Points 1244

Pourquoi pas ? $(find . -mindepth 1 -maxdepth 1 -type d ! -name index -printf '%f/* ') ?

  • pas de code shell en boucle
  • pas de problème d'échappement du côté de l'entrée
  • portable

1voto

Ziyaddin Sadigov Points 2280

Je l'ai utilisé dans sh fonctionne bien. Enlevez les backsticks au début et à la fin de la commande, et ça marchera.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X