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.

Mason
la source
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}"*
Ignacio Vazquez-Abrams
la source
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
2

Vous n'avez pas besoin des guillemets, utilisez simplement:
rm -vrf ${MY_PATH}*

sureshvv
la source
2
Sauf si $MY_PATH contient des espaces.
Ignacio Vazquez-Abrams