Concaténation de chaînes de shell Bash


1

J'essaie de créer une chaîne et de la transmettre à rm, mais j’ai du mal à le faire fonctionner. Je voudrais tout enlever dans MY_PATH. Ci-dessous est ce que j'ai essayé.

MY_PATH=/my/directory/
echo ${MY_PATH}'*' # This works as expected.
rm -vfr ${MY_PATH}'*' # This doesn't.

EDIT: Je l'ai compris. J'ai eu une faute de frappe.


Ne sous-estimez jamais l’importance d’utiliser des guillemets doubles. Cependant, vous n'avez vraiment pas besoin des accolades pour définir une variable. Juste avoir rm -vfr "$MY_PATH" est parfaitement bien.
Yokai

Réponses:


6

Votre echo Est-ce que ne pas travaille correctement. Le shell est responsable de l’extension des caractères génériques, pas de rm.

rm -vfr "${MY_PATH}"*

1
ou, mieux, utilisez rm -vfr "${MY_PATH}"/*, en cas de fuite / est oublié quand MY_PATH est réglé. Dans son libellé actuel, la différence entre MY_PATH=/my/dir/ et MY_PATH=/my/dir est-ce que ce dernier supprimera non seulement /my/dir (le répertoire, pas seulement le contenu), mais supprimera également /my/dir1, /my/directory123, /my/directors_important_files ... Et, mieux encore, vérifiez pour vérifier cela MY_PATH est effectivement défini - sinon (avec ma modification suggérée) vous essayez (mais échouerez probablement, sauf si vous êtes root) de supprimer tout ce qui se trouve sous /*
michael

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.