将多行 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

是否可以将多个脚本转换为这样的一行?(也许我需要删除#注释语句)。

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

用一行程序解析 bash 是一项艰巨的任务......

无论如何,作为起点,这里有一个建议,可以涵盖像本文中提到的非常具体的情况

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

答案2

您可以尝试以下操作:

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

相关内容