回答:
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ボーンシェルモードで実行すると、ここでは問題なく動作します。また、インタラクティブシェルとしてボーンシェルを実際に使用している可能性は少しありますね。