printf

printf

echoinはどこにでもあるように見えますが、すべてのシステムが同じ場所(通常)に配置されるわけではありません。それがどこにあるのかわからずに電話する最も安全な方法は何ですか?coreutils/bin/echoecho

echocoreutils バイナリがシステムにない場合、コマンドが失敗しても問題ありません。これは私が望むものとは異なるものをエコーするよりも優れています。

注:ここで動機はechoバイナリを見つけることです。いいえ各シェルの引数セットを見つけるecho 組み込み一貫性があります。例えば、zshにあるか分からないまま内蔵エコーを介してハイフンだけを安全に印刷する方法はないようですbash

ベストアンサー1

これはcoreutils、GNUシステム用の基本的なUnixユーティリティセットを提供するためにGNUプロジェクトによって開発されたパッケージです。あなたは見つけるでしょうコアツールechoDebianGNUシステム(、、、、、trisquel… )ですぐに動作しますCygwin。他のシステムでは異なる実装を見つけることができます(しばしば動作が異なり、これは最も移植性の低いアプリケーションの1つです)。 FreeBSDにはFreeBSDがあり、ほとんどのLinuxベースのシステムにはbusyboxがあり、AIXにはAIXがあります。FedoraCentOSechoechoechoecho

一部のシステムには複数のシステムがあります(たとえば、およびSolaris /bin/echo/usr/ucb/echo(後者はパッケージの一部であり、現在入手可能なGNUユーティリティパッケージなどの将来のバージョンのSolarisではオプションです/usr/gnu/bin/echo)。これらのうち、CLIは互いに異なります)。

GNUは、coreutilsほとんどのUnixファミリ(MS WindowsなどのUnixファミリではない)システムに移植されているため、ほとんどのマシンでコンパイルできますが、coreutilsおそらくecho望むものではありません。

coreutils echoさらに、バージョン間の非互換性(過去に認識されていない\x41シーケンス)が見つかる可能性があり、その-e動作はPOSIXLY_CORRECT環境(変数)の影響を受ける可能性があります。

echo$PATH他のすべての組み込みプログラムと同様に、(検索で見つかった)ファイルシステムで実行するための一般的なアプローチは次のとおりですenv

env echo this is not the builtin echo

zsh次のこともできます(他のシェルをエミュレートしない場合)。

command echo ...

追加のenvコマンドを実行する必要はありません。

しかし、上記のテキストが移植性に役立たないことを明確にすることを願っています。移植性と安定性のためにprintf代わりに使用してください。

おすすめ記事