エコ版かどうか

エコ版かどうか

専門家https://stackoverflow.com/questions/906590/echo-version-doesnt-worksバージョンを知る必要があります。echo

$ type -a echo | cut -d " " -f 3- | xargs -d '\n'
a shell builtin /usr/bin/echo /bin/echo
$ /usr/bin/echo -v
-v
$ /bin/echo -v
-v

答え1

標準はecho任意のオプションを許可しません(またはXSI拡張の場合はパラメータのみが認識されます-n)。多くの場合、echo組み込みシェルを使用していますが、私がテストしたすべてのシェルで組み込みがecho認識されませんでした--version。しかし、少なくとも別の方法で認識しました-e。私が見つけた唯一の認識は、多くのLinuxシステムにインストールされているGNU coreutilsのものでした。-E-necho--version/bin/echo

したがって、ほとんどの場合、バージョン識別の問題はecho実行中のシェル識別に帰結します。または、/bin/echo現在使用しているシステムがBusyboxではなくGNUであることがわかっている場合は、実行してください。しかも上から見たようにマニュアルページ、GNU coreutilsバージョンのみがサポートされている、サポートされてい--versionない、-vまたは-V


しかし、一般的に言えば、何かを達成しようとしている場合は、特定のバージョンに依存する必要はなく、サポートされている機能にのみ依存する必要があります。この観点printfからecho

文字列をそのまま印刷するには、次のようにします。

printf "%s\n" "$var"

文字列でバックスラッシュエスケープを処理するには、次のようにします。

printf "%b\n" "$var"

最後の改行文字をスキップするには、\n最初のパラメータからその文字を削除してください。

バラよりなぜprintfがechoより優れているのですか? そしてechoを使って「-e」を印刷するには?

答え2

@ilkkachuの答えから始めます:

macOS 10.15ノートブックでこれを使用すると、zsh次のような結果が得られます。

% which echo
echo: shell built-in command 

% whereis echo
/bin/echo

% /bin/echo --version
--version

これは以下を参照して説明される。 Appleはman echo新しいラップトップに2002 BSDバージョンをパッケージ化します。 Appleはこのパラメータのみをサポートしています。 :)echo-n

答え3

echo私の考えには、GNU BashとGNU Coreutilsの2つのプログラムがあるようです。

echoGNUバッシュから

  • (GNU Bash)を見つけるには、echo次のコマンドを使用するhelpか、help echo

  • (GNU Bash)を実行するには、echo以下を試してください。echo

    echo "Hello World"
    echo -e "line 1\ttab\nline2"
    echo --help    # will return error "--help"
    echo --version # will return error "--version"
    help echo
    
  • Bashのバージョンを知りたい場合は、お試しくださいbash --version。 echo GNU Bashのバージョンはありますか?

echoGNU Coreutilsから

  • echo(GNU Coreutils)を見つけるには、次のコマンドを使用できます。
    dpkg-query --listfiles coreutils | egrep '/bin/|/sbin/'
    man echo
    which echo
    
  • echo(GNU Coreutils) を実行するには、以下を呼び出す必要があります。/bin/echo
    /bin/echo "Hello World"
    /bin/echo -e "line 1\ttab\nline2"
    /bin/echo --help    # will return GNU Coreutils help
    /bin/echo --version # will return GNU Coreutils version
    help /bin/echo      # will return error
    

関連情報