echoスクリプトに問題があります。
echo -n "Some string..."
プリント
-n Some string...
次の行に移動します。コンソールでは、改行なしで正しく機能しています。
Some string...
echoスクリプトに問題があります。
echo -n "Some string..."
プリント
-n Some string...
次の行に移動します。コンソールでは、改行なしで正しく機能しています。
Some string...
echoコマンドには複数のバージョンがあり、動作が異なります。どうやら、スクリプトに使用されているシェルは、を認識しないバージョンを使用しているよう-nです。
このprintfコマンドの動作ははるかに一貫しています。echoのような単純なものには問題ありませんが、より複雑なものecho helloには使用することをお勧めします。printf
どのシステムを使用していて、スクリプトはどのシェルを使用していますか?
bash「echo」と呼ばれる「組み込み」コマンドがあります。
$ type echo
echo is a shell builtin
さらに、適切な実行可能ファイルである「echo」コマンドがあります(つまり、シェルのフォークと実行/bin/echoは、解釈echoして実行するのではなく)。
$ ls -l /bin/echo
-rwxr-xr-x 1 root root 22856 Jul 21 2011 /bin/echo
とechoに関するどちらかの動作は異なります。あなたの最善の策は、私が見た4つの異なる*NIXフレーバーで利用可能なを使用することです。\c-nprintf
$ printf "a line without trailing linefeed"
$ printf "a line with trailing linefeed\n"
で試してみてください
echo -e "Some string...\c"
(あなたの質問から理解したように)それは私にとって期待通りに機能します。
この情報はmanページから取得したことに注意してください。このmanページには、シェルに独自のバージョンがある可能性があることも記載されていますが、独自のバージョンがあるechoかどうかはわかりませんbash。
これを達成するために、私が頻繁に使用する基本的に2つの方法があります。
1.カーソルエスケープ文字(\c)をecho -e
例:
for i in {0..10..2}; do
echo -e "$i \c"
done
# 0 2 4 6 8 10
-eflagは、文字列内のEエスケープ文字を有効にします。 \cカーソルを現在のラインに戻します。また
2.printfコマンドの使用
例:
for ((i = 0; i < 5; ++i)); do
printf "$i "
done
# 0 1 2 3 4
「read」などの他のコマンドでif内でechoを使用すると、設定が無視され、とにかく新しい行にジャンプする可能性があります。
最も人気のある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"
enable -n echo
echo -n "Some string..."
私は今あなたの出力が以下のように印刷されると信じています
~ echo -e "String1\nString2"
String1
String2
xargsを使用して、複数行の標準出力を同じ行に入れることができます。
~ echo -e "String1\nString2" | xargs
String1 String2
~
AIXの/usr/ bin/echoおよび/bin/ echoは引数をサポートしていないため、shまたはKornShell()シェルを使用している場合は-nも-eも機能しないことに注意してください。ksh
CシェルとBashには、 -nをサポートする独自のエコーが組み込まれています。多くのシェルスクリプトがshまたはKornShell
を明示的に使用しているため、これは適切
AIXには/usr/ bin / printfがあるので、以前のいくつかの回答で示唆されているように、
$ printf "whatever"
-nがサポートされてecho -n "whatever"いる場所と同等です。
シェルスクリプトを作成するときは、常に#!/usr/bin/env bash最初の行として使用してください。
このシェルは、エスケープシーケンスを省略したり操作したりしません。
例:
echo "This is first \\n line"
プリント
This is first \n line.
IBM z / OSでも同じ問題が発生したため、 echoの代わりにprintを使用しましたが、機能しました。
print -n "Some string ...."