$-Zeichen im UNC-Pfad: Was ist daran so schlimm`?



  • Guten Tag

    Im Gespräch mit einem sehr schlecht gelaunten Systemtechniker (Wie so oft hatte der wohl ein Problem mit mir als Programierer 😃 👍) wurde mir nahegelegt, niemals einen Share im Windows-Netzwerk mit einem $-Zeichen im Namen zu verwenden. Auf meine Nachfrage hin, was denn das Problem damit sei, konnte der gute Herr mir jedoch keine Begründung liefern.

    Weiss jemand ein konkretes Problem mit solchen UNC-Pfden à la \\SERVER\unsichtbar$\? Im Internet habe ich nichts gutes gefunden.

    MfG



  • Weil $ in Shellscripten idR eine Variable anzeigt.

    Wenn du zB ein

    touch "foo$foo"
    machst, und $foo logischerweise leer ist, dann erstellst du nur die datei "foo".

    Hier reichen " nicht, man muss $ escapen:
    touch foo\$foo

    und das ist meistens unpraktisch 😉



  • Okay, das ist schonmal eine wertvolle Erkentnis, danke 🙂

    Sowas passiert aber doch sicher nur, wenn man gerade ein Literal verwendet. Ich nehme kaum an, dass innerhalb eines variablen Strings plötzlich alles so ersetzt wird.



  • Shade Of Mine schrieb:

    Hier reichen " nicht, man muss $ escapen:
    touch foo\$foo

    und das ist meistens unpraktisch 😉

    Die praktische Alternative ist:
    touch 'foo$foo'
    🙂



  • /rant/ schrieb:

    Sowas passiert aber doch sicher nur, wenn man gerade ein Literal verwendet. Ich nehme kaum an, dass innerhalb eines variablen Strings plötzlich alles so ersetzt wird.

    Was meinst du mit "innerhalb eines variablen String"?

    Wenn ich in meinem Shell Script folgendes mache:

    mv "foo$foo" "bar$bar"
    

    dann habe ich den Salat. Ich müsste hier escapen...

    PS:
    Ah ja, oder wie Christoph sagt ' verwenden. Daran habe ich jetzt nicht gedacht.



  • nebenbei ist "!" auch ein schönes Zeichen für die Bash :).

    Und da er es dir nicht verboten hat...;)



  • otze schrieb:

    nebenbei ist "!" auch ein schönes Zeichen für die Bash :).

    Das Ausrufezeichen hat nur eine spezielle Bedeutung, wenn -o history gesetzt ist:

    $ echo foo
    foo
    $ !e # letzten mit e beginnenden Befehl wiederholen
    echo foo # letzten mit e beginnenden Befehl wiederholen
    foo
    $ set +o history # disable history
    $ !e
    !e: command not found
    $
    

    In Shell-Skripten ist das history-Flag standardmäßig deaktiviert und auf interaktiven Shells hat man Tab-Vervollständigung, die ! korrekt quotet, deswegen ist das Ausrufezeichen in der Praxis nur äußerst selten ein Problem.

    edit: Weil in Bash weder $ noch ! wirklich problematisch sind, vermute ich eher, dass bei der Ursprungsfrage irgendeine andere Software inkompatibel mit $ im Pfadnamen war. Ein Dollar im Pfad ist bei bash normalerweise kein Problem, weil man Dateinamen entweder nicht hartkodiert (dann wird $ nicht ausgewertet) oder wenn man sie hartkodiert, dann quotet man sie mit single quotes '', wo $ auch nicht ausgewertet wird.

    Was in Bash viel problematischer als $ und ! ist, ist whitespace im Dateinamen, vor allem \n. Ich untertreibe sehr, wenn ich sage, dass bash nicht besonders gut auf Dateinamen mit whitespace ausgelegt ist.



  • /rant/ schrieb:

    Weiss jemand ein konkretes Problem mit solchen UNC-Pfden à la \\SERVER\unsichtbar$\? Im Internet habe ich nichts gutes gefunden.

    Naja, dass sie im Explorer halt "unsichtbar" sind 😃


Log in to reply