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:
for f in *
for f in *;
for f in *;do
Dasselbe gilt für if
die 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