2016-10-06 2 views
0

Pourquoi cette commande fonctionne:

sudo rm -rf ${server_tomcatHomeDir}temp/* 

Alors que le même, mais avec arg cité, ne fonctionne pas:

sudo rm -rf "${server_tomcatHomeDir}temp/*" 

Il pourrait être seulement liée à des citations, mais pourquoi cette commande fonctionne même avec arguments cotés:

sudo cp "$HOME/${artifact}" "${server_tomcatHomeDir}/webapps/${webapp}" 

Je ne comprends pas. Quelqu'un peut-il clarifier? Je veux juste utiliser des guillemets dans la première commande pour empêcher la globalisation et la division des mots.

+0

"Ne fonctionne pas" - pas si; cela fonctionne parfaitement à la suppression d'un fichier nommé '*' dans le répertoire donné. :) –

+1

Mettez un '/' avant 'temp'. Cela ne fait pas de mal d'avoir deux '/' si '$ server_tomcatHomeDir' se termine par un'/', mais votre code ne fonctionnera pas correctement si' $ server_tomcatHomeDir' ne se termine pas par '/'. – chepner

Répondre

3

Le * ici est une extension de chemin (glob) jeton, qui correspondra à un certain nombre de caractères (y compris zéro) dans le nom de fichier, et il est pas élargi lorsqu'il est placé entre guillemets, il est traité littéralement alors.

Do:

sudo rm -rf "${server_tomcatHomeDir}"temp/* 

Notez que, il est presque toujours une bonne idée de citer vos variables, en particulier lorsqu'ils traitent avec des noms de fichiers pour éviter la séparation de mots, et l'expansion du chemin.

1

Vous devez mettre le * en dehors des citations, si

sudo rm -rf "${server_tomcatHomeDir}temp/"*