複数行のbashスクリプトを1行に変換する

複数行のbashスクリプトを1行に変換する

次のようなスクリプトがあります:

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

このように複数のスクリプトを 1 行に変換することは可能ですか? (#コメント ステートメントを削除する必要があるかもしれません)。

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

上記のスクリプトの for ステートメント構文を次のように変更できます。

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

条件にも同じことが当てはまりますif。すべてのケースで、適切な 1 行を生成する必要があります。これを自動化する方法は何でしょうか?

答え1

ワンライナーで bash を解析するのは難しい作業です...

とにかく、出発点として、ここで提示したような非常に特殊な状況をカバーするための提案をします。

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

答え2

次のことを試すことができます:

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

関連情報