2011-02-11 2 views
0

Je souhaite générer un nom de fichier à partir d'une chaîne saisie par l'utilisateur et m'assurer qu'il est correctement échappé.slashes de fichier d'échappement

par exemple, si l'utilisateur entre /usr/bash la sortie sera \/usr\/bash et si l'entrée est The great theater la sortie est The\ great\ theater.

+2

Qu'essayez-vous vraiment de faire? –

+0

-1 pour ne pas spécifier exactement ce qui doit être échappé et, plus important encore, pourquoi. – chepner

+0

J'ai eu un problème similaire: nécessaire d'ajouter une autre barre oblique inverse pour échapper à une barre oblique inverse existante. Par exemple, en changeant c: \ home à c: \\ home. – OutputLogic

Répondre

5

Etes-vous sûr de vouloir faire ceci? C'est une sorte d'odeur de code. Il y a très probablement une meilleure façon de faire ce que vous essayez de faire que de réduire votre contribution. Correctement citant vos variables lorsque vous les utilisez habituellement suffit:

$ file='some file name.txt' 
$ touch "$file" 
$ ls "$file" 
some file name.txt 

Si vous insistez, bien que, utilisez le format %q avec printf:

$ str='The great theater' 
$ printf '%q\n' "$str" 
The\ great\ theater 
$ escaped=$(printf '%q' "$str") 
$ echo "$escaped" 
The\ great\ theater 

Notez que ce n'échappera pas à des barres obliques comme ils n » est t normalement des caractères spéciaux.

+1

Je vais seconder le commentaire "odeur de code", et ajouter que ce qui doit s'échapper et comment il doit s'échapper dépend beaucoup de ce qui va arriver à la chaîne. printf% q est-ce que la citation peut être interprétée par bash. Si vous devez vous échapper, disons, dans une requête SQL, c'est un ensemble différent de règles d'échappement. Si ça va être interprété par bash puis SQL, il faut qu'il soit double-échappé (et dans le bon ordre)! –

+0

il s'agit de s'échapper pour bash – akiva

Questions connexes