移植性の順でこれらのツールをランク付けできますか?次のうちどれですか?確認する最小の* nixシステムでも見つけることができますか?そのうち100%確かに現れる人はいますか?私の推測では、順序は次のとおりです。
- アッ
- sed
- シェン
- 真珠
一部のシステムでは基本的にBourneシェルを使用しないと思いますが、一部シェルはデフォルトで存在しますか、常に存在しますか/bin/sh
? Bourneタイプのエンクロージャでなければ、おそらくそうではありません。両方awk
そしてsed
POSIX仕様にこれを説明するページがあるので、おそらく常にそこにいるはずです。そうですか?できますか?確かにどちらも* nixにインストールされていますか?組み込みシステムも含まれますか?
答え1
sed, awk, Perl, shの中で、移植性が最も良いものは何ですか?
sed
sh
awk
そして、POSIXで指定したように移植性があるとしても、perl
標準でサポートされないという意味ではありません。
移植性の順でこれらのツールをランク付けできますか?
互換性のあるコードを使用する場合は、移植性のために3つのPOSIXコマンドを使用しないでください。
次のうち最も小さい *nix システムでも必ず見つけることができるものは何ですか?
オペレーティングシステム用のPOSIXには、3つのPOSIXツールと他の多くのユーティリティが必要です。ただし、最小化または不完全/標準以下の実装の提供により、一部の機能が不足しているオペレーティングシステムが存在します。
実際、ほとんどの(すべてではありませんが)無料のオープンソースUnixファミリーオペレーティングシステムは、おそらく適合プロセスを通過しようとしても合格しないし、決して試みることはありません。
そのうち100%確かに現れる人はいますか?
* nixなどのオペレーティングシステムにはBourne構文ベースのシェルがないことに驚きましたが、特に組み込みシステムの場合は何でも可能です。
私の考えでは、順序は次のとおりです。一部のシェルはデフォルトとして表示され、常に/ bin / shにありますか?
/bin/sh
Bourne構文シリーズシェルでも構いませんが、POSIX互換システムでもPOSIX互換性は保証されません。たとえば、POSIXではなく既存の元のBourneシェル/usr/xpg4/bin/sh
であるSolaris 10以下で動作します。/bin/sh
答え2
sed
Autotoolsからインスピレーションを得てください:正しく動作する必要があるものを書く必要がある場合は、BourneシェルとPOSIXシェル(おそらく改善)の最も低い共通分母に固執してください。どこでも。一部のシステムに問題がある可能性がありますが、再構築すると問題を解決できます。
test
たとえば、一部の古代システムには、次のような拡張エラーの問題があります[
。
if [ $foo = bar ] ; then...
だからAutoconfがすることはそれを書き直すことです次のように、単一文字プレフィックスで二重引用符で囲みます。
if [ x"$foo" = "xbar" ] ; then...
ここでも"x$foo"
使用できます。これは$foo
有効なオプションになる可能性を防ぎ、エイリアスなので、式を誤って解釈する可能性がありtest(1)
ます。解決策は、未知のパラメータtoが常にtoで始まる状況を設定することです。つまり、 to に特別な意味を持つことができないという意味です。[
test
[
x
[
(Autoconfはまたtest
代わり[
にM4[
、文法にも使用されます。 )
awkはPOSIXです、理論的にはどこでも使用できます。Busyboxでもawk
、非常に厳しい組み込みLinuxシステムでもこれを達成できます。しかし、awk
.NETがないシステムを発見しても驚くことはありませんsed
。私の考えは複雑さのためだと思います。単純なツールが積極的な分類で生き残る可能性が高くなります。
Perlは広く使用されている標準(POSIXなど)に属していないので、事前にターゲット環境について何も知らない限り、Perlは信じられません。デフォルトでは、Perlは次の場所にはインストールされません。
- シビン
- FreeBSDとNetBSD
- Slackwareを含む一部のLinuxの「最小」インストール
- 多くの組み込みLinuxでは、主にBusyboxをユーザースペースとして使用しています。
Autoconf マニュアルには移植可能なシェルプログラミングに関する章これが役に立ちます。最後の部分では、、、sed
およびawk
他の多くのツールを紹介します。