専門家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
最初のパラメータからその文字を削除してください。