Ausgabe in einem Shell Skript

Hinweis: In dem Thema Ausgabe in einem Shell Skript gibt es 15 Antworten auf 2 Seiten. Der letzte Beitrag () befindet sich auf der letzten Seite.
  • Nein, du kommst weder mit printf, noch mit den Forenregeln zurecht.
    Es ist printf völlig egal, was es zu drucken hat.
    Das tut es korrekt, solange du nicht an den LANG Einstellungen rumgefummelt hast.


    Du sollst ALLES, das heißt DEINEN Code UND die Ausgabe posten.
    Denk mal drüber nach, warum.


    Irgendwann kommst du vielleicht auf den glorreichen Gedanken, dass wir damit den Fehler einfach sehen würden.
    Und dann könnte man mal eben schnell sinnvoll antworten.


    Aber sinnlos hin- und herschreiben, ein wenig mutmaßen, ob nicht der eine Befehl ein wenig erkältet, der andere vielleicht doch schon zu gebrechlich ist, macht doch viel mehr Spaß, wenn auch keinerlei Sinn.

  • Danke für deine Hilfe




    Idefix

  • Du hast recht.


    (Ich hätte wohl besser gelesen, statt zu maulen)


    printf (egal ob das Bash interne oder das /usr/bin/printf machen das nicht.
    Sie schlucken IMMER für JEDEN Umlaut eine Stelle.


    Das ist sogar im POSIX Standard genau so definiert.
    (völlig idiotisch, aber wohl dauerhaft. Nichts hält sich so lange, wie Dummheiten)


    Du hast mehrere Möglichkeiten das zu umgehen.
    Die zsh und fish halten sich hier nicht an die Standards und können das deshalb.
    (Was aber auch keine Lösung ist)


    Es bleiben dir vernünftigerweise nur zwei Möglichkeiten (, die mir adhoc dazu einfallen):
    Du bastelst dir eine eigene printf Funktion, die dir das sauber erledigt,
    oder du nimmst awk, dort tut die printf Funktion das anständig.


    Eine mögliche Shelllösung:

    Das \r im Formatstring heißt "Gehe in der jetzigen Zeile zurück auf Postition Null". Das Wagen\rücklauf im Deutsch der alten Säcke, die noch Schreibmaschine können. Und OHNE Zeilenvorschub.
    Damit positionierst du den Cursor in der aktuellen Ausgabezeile wieder am Anfang und springst dannach auf Position 40 der Zeile.


    Beachte, dass der Formatstring jetzt in doppelten Hochkommata steht.
    Die Bash expandiert innerhalb einfacher Hochkommata absolut gar nichts. Also würde mit einfachen Hochkommatas auch die Variable pos2 wortwörtlich als $pos2 erscheinen.


    Ich denke, awk ist einfacher, und in jedem Fall lernenswert.


    Hatte ich schon mal erwähnt, dass die Code-Tags seit Wochen keine Kommentare anzeigen, wenn man nicht Brainfuck als Sprache auswählt?
    Ich schreibe keinen Brainfuck, sondern Shell.

  • Das geht relativ einfach:


    Code
    PRINT_FORMAT="|%-15s | %-15s | %-15s | %-15s |\n"
    printf "$PRINT_FORMAT" "eins" "bla" "text" "nochwas"
    printf "$PRINT_FORMAT" "1" "2" "3" "so!"
    printf "$PRINT_FORMAT" "zahlenwert" "nice" "" "<-leer"


    Macht eine Tabelle die jeweils 4 15 Zeichen breite Spalten hat

    Für den Inhalt des Beitrages 120868 haftet ausdrücklich der jeweilige Autor: wn48z

  • @wn48z
    Bitte benutze Code-Tags, ist einfach lesbarer.
    Auch in deinem apache Beitrag.

    Für den Inhalt des Beitrages 120870 haftet ausdrücklich der jeweilige Autor: Sauerland