シェルスクリプトでパラメータなしでechoを使用する

シェルスクリプトでパラメータなしでechoを使用する

私は次のbashスクリプトを見つけましたネットワーク与えられた要素行の累乗をセットします。

p() { [ $# -eq 0 ] && echo || (shift; p "$@") |
        while read r ; do echo -e "$1 $r\n$r"; done }

最初の後にパラメータは&&ありませんecho

これをテストするコードは次のとおりです。

p $(echo -e "1\n2\n3")

答え1

書式設定に使用されます。

$ p() { [ $# -eq 0 ] && echo || (shift; p "$@") |
>         while read r ; do echo -e "$1 $r\n$r"; done }
$ p $(echo -e "1\n2\n3")
1 2 3
2 3
1 3
3
1 2
2
1

$ p                 

$

p単一のプロンプトと次のプロンプトの間に空白行があります。これはecho

これはもっと読みやすいです。

p() {
    if [ $# -eq 0 ]; then
        echo
    else
        (shift; p "$@") | while read r;
            do echo -e "$1 $r\n$r";
        done
    fi
}

あなたがなければならないと言う理由は、それが本当に重要だからです。一部コマンドはそこにあります。それ以外の場合、論理は壊れます(実際には論理が少し奇妙ですが)。

関連情報