Moin, Ratti:
Man kann keinen Designer davon abhalten, seinen Font "~/*" zu nennen. :-)
Bernd Brodesser:
Doch der Kernel. Ich wiederhole nochmal. Es ist nicht möglich, daß sich in einem Dateiname ein / befindet. Völlig egal, ob Du das in bash, ksh, csh, tcsh, zsh, perl, php, C, C++, Java, fortran, pascal, eifel, assembler oder was auch immer machst. Es geht nicht.
Mißverständniss: "Seinen Font ~/* nennen" ist nicht "Seine Fontdatei ~/* nennen". Der Fontname ist z.B. "Arial Bold Italic". Der Dateiname ist "ARIALBI.TTF". Da ich gedenke, die Datei wie den Font zu nennen, ergäbe sich bei obigem Beispiel mv ALTER_NAME_DER_DATEI.TTF ~/*.ttf was gut Schaden anrichten kann. Also muß ich die Dateinamen absichern. Ich will ja keine "/" im Dateinamen unterbringen, die müssen dann eben raus. Ich war auf der Suche nach einer Funktion, die "machbare, aber hässliche" Dateinamen umgänglich macht. Ein "*" beispielsweise ist ja legal.
Nimm doch einfach mv $OLDFILENAME $NEWFILENAME oder cp $FILENAME $NEWFILENAME
Damit kann in den Variablen stehen, was will. Es wird gemacht. Solange im Name der Variable nichts mekrwürdiges steht, brauchst Du nicht zu maskieren. Der Inhalt der Variable ist egal, die bash wertet nur einmal aus. Aber das habe ich Dir schon mal dagelegt.
Ich komme aber aus perl, wo ich die Fontnamen auslese. Deswegen kann es zu einer doppelten Substitution kommen. Erst wertet perl aus, dann übergibt er an die bash, die wertet wieder aus. #!/usr/bin/perl $font ="ARIALBI.TTF"; $neu_name =&fontname($font); `mv $font $neu_name.ttf`; Die erste Substitution führt perl durch: `mv $font $neu_name.ttf` wird zu mv ARIALBI.TTF Arial Bold Italic.ttf Das ist bereits falsch - die Spaces gehören da nicht hin. Gar nicht daran zu denken, es käme "*" oder sowas vor. Auch ein " rettet mich nicht. Wenn der Font 12"-Nagel heisst, generiere ich bereits in perl aus `mv "$font" "$neu_name.ttf"`; den Ausdruck mv "NAGEL.TTF" "12"-Nagel.ttf" was ebenfalls syntaktisch falsch ist. Ich bräuchte also sowas: #!/usr/bin/perl $font ="ARIALBI.TTF"; $neu_name =&fontname($font); $befehl ="mv ".&sicherer_dateiname($font). " ".&sicherer_dateiname("$neu_name.ttf"); `$befehl`; Gesucht wird die fiktive funktion "sicherer_dateiname()", die beispielsweise aus folgende konversion ausführt: Arial Bold Italic zu Arial\ Bold\ Italic Sabon*Bold zu Sabon\*Bold oder, deinen Einwurf betreffend: Courier/Italic zu Courier_Italic (Weil: "/" geht nicht, wie du ja auch sagst) Resultat: mv NAGEL.TTF 12\"-Nagel.ttf Die Datei heisst dann also 12"-Nagel.ttf Im Grunde genommen brauche ich also eine simple RE - ich kenne nur einfach nicht alle Zeichen, die unter der Shell Sonderzeichen sind. Sprich: _ ist OK, * muß gequotet werden, ... Solange ich keine verlässlich komplette Sonderzeichenliste habe, kann ich das also nicht programmieren. Und für Google fehlen mir die Suchbegriffe, ich kann ja schlecht nach "* \ / ~ $" suchen, und "quote" ist auch nicht so selten. :-) Ich habe neulich ja schon ein Codefragment bekommen. Ehrlich gesagt, ein Tipp, wo alle Sonderzeichen gelistet sind, würde mich glücklicher machen, weil ich dann auch gleich mitkriege, was es gibt. Aber es geht gut voran. Sieht so aus, als könnte ich bald meine Signatur ändern auf "http://www.gesindel.de | Fontlinge | Die Schriftenverwaltung für LINUX" ;-))) Auf dem Weg zum nützlichen Mitglied der Gesellschaft: Gruß, Ratti -- http://www.gesindel.de | Fontlinge | Die Schriftenverwaltung für Windows