將多行 bash 腳本轉換為一行

將多行 bash 腳本轉換為一行

我有這樣的腳本:

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

我可以更改上面腳本中的語句語法,例如:

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

同樣適用於if條件。在所有情況下,它都應該產生正確的 1 行。執行此操作的自動化方法是什麼?

答案1

在 oneliners 中解析 bash 是一項艱鉅的任務...

無論如何,作為一個起點,這裡有一個建議來涵蓋非常具體的情況,例如所提出的情況

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

答案2

您可以嘗試以下操作:

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

相關內容