Autotoolsからヒントを得る:どこでもsed動作する何かを書かなければならない場合は、BourneとPOSIXシェルの最小公分母(おそらく拡張される)に固執します。何かが壊れるシステムが存在する場合がありますが、書き直すことでそのような問題を回避できます。
例えば、いくつかの古代のシステムは、内の拡張エラーの問題を抱えてtest別名を、[:
if [ $foo = bar ] ; then...
そのAutoconfの練習は、それを書き換えることであるので、同様に、単一文字のプレフィックスで二重引用符で:
if [ x"$foo" = "xbar" ] ; then...
"x$foo"ここでも使用できます。可能性に対するこの警備員$fooに有効なオプション可能性がありtest(1)、それ以来は[のための別名であるtestことが式を誤解可能性があり、。解決策は、不明な引数が[常に始まる状況を設定xすること[です。つまり、それは特別な意味を持つことができません。
(Autoconfはのtest代わりにを使用することも推奨しますが[、そのアドバイスはM4との競合の可能性への反応として生じ[ます。M4は構文でも使用します。)
awkはPOSIXなので、理論的にはどこでも利用できます。Busyboxにもありますので、awk非常に制限の厳しい組み込みLinuxシステムにも実装できます。それでも、なしawkでシステムに出会っても驚くことはないでしょうsed。私はそれが複雑さに帰着すると思う:より単純なツールは攻撃的なトリアージを生き残る可能性が高い。
Perlは、POSIXなどの広く普及している標準の一部ではないため、ターゲット環境について事前に何も知らなければ、単純にそれを当てにすることはできません。Perlはデフォルトでは次の場所にはインストールされません。
- シグウィン
- FreeBSDおよびNetBSD
- Slackwareを含む一部のLinuxの「最小」インストール
- ユーザーランドで主にBusyboxに依存する多くの組み込みLinux
Autoconfマニュアルには、役に立つシェルプログラミングに関する章があります。ツールが好き最後のセクションカバーsed、awkおよび多くの他。