専門家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
-n
echo
--version
/bin/echo
したがって、ほとんどの場合、バージョン識別の問題はecho
実行中のシェル識別に帰結します。または、/bin/echo
現在使用しているシステムがBusyboxではなくGNUであることがわかっている場合は、実行してください。しかも上から見たようにマニュアルページ、GNU coreutilsバージョンのみがサポートされている、サポートされてい--version
ない、-v
または-V
。
しかし、一般的に言えば、何かを達成しようとしている場合は、特定のバージョンに依存する必要はなく、サポートされている機能にのみ依存する必要があります。この観点printf
からecho
。
文字列をそのまま印刷するには、次のようにします。
printf "%s\n" "$var"
文字列でバックスラッシュエスケープを処理するには、次のようにします。
printf "%b\n" "$var"
最後の改行文字をスキップするには、\n
最初のパラメータからその文字を削除してください。
答え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つのプログラムがあるようです。
echo
GNUバッシュから
(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のバージョンはありますか?
echo
GNU 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