Konvertieren Sie ein mehrzeiliges Bash-Skript in eine einzeilige

Konvertieren Sie ein mehrzeiliges Bash-Skript in eine einzeilige

Ich habe ein Skript wie dieses:

for f in *
do
    #if condition
    if [[ -d $f ]]; then
        echo "$f is a directory";
    else
        echo "$f is not a directory";
    fi
done

Ist es möglich, mehrere Skripte auf diese Weise in eine Zeile umzuwandeln? (Vielleicht muss ich #die Kommentaranweisung(en) löschen.)

for f in *; do  if [[ -d $f ]]; then  echo "$f is a directory"; else  echo "$f is not a directory"; fi done

Ich kann die Anweisungssyntax im obigen Skript wie folgt ändern:

  1. for f in *
  2. for f in *;
  3. for f in *;do

Dasselbe gilt für ifdie Bedingung. In allen Fällen sollte eine richtige Zeile generiert werden. Wie könnte das automatisiert erfolgen?

Antwort1

Das Parsen von Bash in Einzeilern ist eine schwierige Aufgabe ...

Wie dem auch sei, hier ist ein Vorschlag, um ganz spezielle Situationen wie die hier vorgestellte abzudecken.

perl -p0e '
    s/#.*//; 
    s/;?\s+(do|done|then|else|fi)\s+/ ; $1 /g '

Antwort2

Sie können Folgendes versuchen:

awk '{ printf "%s", $0 }' script.txt

verwandte Informationen