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
-n
printf
$ 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
-e
flagは、文字列内の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 ...."