次のスクリプトを考えてみましょう。
#!/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
別のパラメータを使用して呼び出します。