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
および多くの他。