シェルの ifdef スタイル条件には以下が含まれます。

シェルの ifdef スタイル条件には以下が含まれます。

次のスクリプトを考えてみましょう。

#!/bin/sh                                                                                                                                                   

echo "" | ps2pdf -sPAPERSIZE=a4 - blank.pdf
cp blank.pdf blank2.pdf

pdftk \
    A=blank.pdf `#first file` \
    B=blank2.pdf `#second file` \
    cat A B \
    output b.pdf

しかし、変形を望んでいるとしましょう。

#!/bin/sh                                                                                                                                                   

echo "" | ps2pdf -sPAPERSIZE=a4 - newblank.pdf
cp newblank.pdf newblank2.pdf

pdftk \
    A=newblank.pdf `#first file revised` \
    B=newblank2.pdf `#second file revised` \
    cat A B \
    output b.pdf

さて、彼らが一緒にいたいとしましょう。私はできます。

#!/bin/sh                                                                                                                                                   

echo "" | ps2pdf -sPAPERSIZE=a4 - blank.pdf
cp blank.pdf blank2.pdf
cp blank.pdf newblank.pdf
cp blank.pdf newblank2.pdf

pdftk \
    A=blank.pdf `#first file` \
    `#A=newblank.pdf` `#first file revised` \
    B=blank2.pdf `#second file` \
    `#B=newblank2.pdf` `#second file revised` \
    cat A B \
    output b.pdf

ただし、バージョンを切り替えるにはコメントを付けてコメントを削除する必要があります。変数がCマクロスタイルで定義されているかどうかに応じてバージョンを取得できるように条件付きインクルードを実行する方法はありますか#ifdef

ポータブルシェルソリューションがあればいいのですが、そうでない場合はbash専用のソリューションも機能します。

最後に、この例では2つのファイル(blank.pdf.)のみを使用しますblank2.pdfが、必要な数のファイルを処理できるソリューションが必要です。また、比較のために、各ファイルの古いバージョンと新しいバージョンを一緒に保持することをお勧めします。また、一部のファイルは元のバージョンと新しいバージョンで同じである可能性があるため、この場合は繰り返さないことをお勧めします。

ベストアンサー1

提供されたバージョン間の唯一の違いはファイル名/パラメータです。

""のような構文を使用してほぼ同じコードのバリエーションを区別することは、通常、メンテナンス不可能で重複するifdefコードにつながる可能性があるため、最善のアプローチではありません。

あなたの例では、シェル変数(およびif ... ; then小節)を使用して2つのバリアントを切り替えることができます。

 #call the script with -2 to switch to the second version.
 if [ "$1" = "-2" ]; then
           firstfile="newblank.pdf"
           secondfile="newblank2.pdf"   
 else
           firstfile="blank.pdf"
           secondfile="blank2.pdf"   
fi

echo "" | ps2pdf -sPAPERSIZE=a4 - "$infile"
cp "$firstfile" "$secondfile"

pdftk \
    "A=$firstfile" `#first file` \
    "B=$secondfile" `#second file` \
    cat A B \
    output b.pdf

少しだけ変更して同じコードを複数回呼び出すには、次のように定義することをお勧めします。functions別のパラメータを使用して呼び出します。

おすすめ記事