回答:
echo
コマンドには複数のバージョンがあり、動作が異なります。どうやら、スクリプトに使用されているシェルはを認識しないバージョンを使用してい-n
ます。
printf
コマンドは、はるかに一貫性のある行動を持っています。echo
のような単純なものには問題echo hello
ありませんが、printf
もっと複雑なものには使用することをお勧めします。
どのシステムを使用していて、スクリプトはどのシェルを使用していますか?
#!/bin/bash
うまくいきました。通常はbashを使用しています。
printf
コマンドのWindowsバージョンがあるかもしれません。
echo
常に改行を追加します...回避策はせいぜいぎこちないです。
%
はシェルプロンプトです。これを試してみて、そして慎重に見て:printf hello; sleep 5
bash
「echo」と呼ばれる「組み込み」コマンドがあります。
$ type echo
echo is a shell builtin
さらに、適切な実行可能ファイルである「echo」コマンドがあります(つまり、それ/bin/echo
を解釈echo
して実行するのではなく、シェルフォークとexecです)。
$ ls -l /bin/echo
-rwxr-xr-x 1 root root 22856 Jul 21 2011 /bin/echo
いずれかの行動echo
へのWRT \c
とは-n
異なります。あなたの最善の策はprintf
、私が調べた4つの異なる* NIXフレーバーで利用可能なを使用することです。
$ printf "a line without trailing linefeed"
$ printf "a line with trailing linefeed\n"
で試す
echo -e "Some string...\c"
期待どおりに機能します(質問から理解できました)。
この情報はman
ページから取得したことに注意してください。このman
ページでは、シェルにの独自のバージョンがある可能性があることも示されています。独自のバージョンがあるecho
かどうかbash
はわかりません。
echo "some string...\c"
代わりに言いたいだけでしょう。ただし、大きく異なるエコーコマンドを使用して複数のbashバリアントをサポートする必要がある場合は、おそらくprintfを使用するか、次のようなものでエコーコマンド機能を確認する必要があります[ -n "$( echo -e )" ] && echo "sh stuff\c" || echo -e "bash stuff\c"
(少なくともbashは\ cもサポートしているため、 -nオプション、ただしbashには-eが必要です)
if内で "read"などの他のコマンドを使用してエコーを使用すると、設定が無視され、とにかく新しい行にジャンプします。
ただのための最も人気のあるLinux Ubuntu
&それのbash
:
使用しているシェルを確認してください。主に作品の下に、他にこれを参照してください。
echo $0
上記のプリントのbash
場合、以下が機能します。
printf "hello with no new line printed at end"
または
echo -n "hello with no new line printed at end"
bash
ボーンシェルモードで実行すると、ここでは問題なく動作します。また、インタラクティブシェルとしてボーンシェルを実際に使用している可能性は少しありますね。