Je reçois de l'utilisateur un certain chemin de fichier absolu, et je veux créer une variable qui sera une chaîne qui n'inclura pas seulement les deux premiers composants du chemin de fichier, mais sans l'imprimer ou quoi que ce soit.
Par exemple, le chemin absolu pourrait être:
/home/myusername/folder1/folder2/folder3
Et il est enregistré dans "target_path", et je veux que "mydir" soit seulement:
/folder1/folder2/folder3
J'ai essayé d'utiliser la commande cut de différentes manières mais sans succès.
command-line
bash
environment-variables
La vie de pi
la source
la source
/home/username
ce le$HOME
répertoire réel de l'utilisateur appelant? si c'est le cas, vous pouvez le supprimer simplement en utilisantmydir="${target_path#$HOME}"
je penseRéponses:
Utilisation de la manipulation de chaînes de bash :
Ainsi, la chaîne que vous souhaitez serait (en ajoutant à nouveau la barre oblique):
Pour une variable
a
,${a#foo}
supprimera la chaîne la plus courte correspondantfoo
au début dea
. Ainsi, nous supprimons la chaîne la plus courte contenant trois/
(y compris la barre oblique principale dans le chemin), pour supprimer les deux premiers composants du chemin absolu.la source
Voici un exemple d'utilisation
cut
Si vous avez besoin de l'interligne,
/
vous pouvez l'ajouter| sed 's/^/\//'
à la fin de votre ligne.Vous en avez besoin,
-f4-
car il-d '/'
indiquecut
d'utiliser/
comme délimiteur entre les champs. Le premier champ vient donc avant le premier délimiteur, dans ce cas le premier champ est vide. Il enfolder1
va de même pour le 4ème champ et-f4-
indique à cut d'utiliser tous les champs à partir du 4ème.la source
Vous pouvez utiliser l'expansion des paramètres bash comme ceci:
Après ça:
donne:
Cela fonctionne en supprimant la première correspondance du modèle
/*/*/
de votre variable target_path, en utilisant la${target_path#pattern}
syntaxe d'expansion des paramètres du shell. Malheureusement, cela supprime le premier/
caractère, c'est pourquoi ce caractère doit être explicitement inclus lors de la définition de la variable myvar.Avertissement: vous devez vérifier que votre variable target_path contient certains caractères et qu'elle est plus longue que deux segments de chemin avant d'utiliser cette méthode. Par exemple si
target_path=/home/username/
, alorsmyvar=/
. Cela pourrait être dangereux pour votre système si vous exécutez quelque chose commerm -rf "$myvar"*
. N'essaye pas ça!la source