623

echoスクリプトに問題があります。

echo -n "Some string..."

プリント

-n Some string...

次の行に移動します。コンソールでは、改行なしで正しく機能しています。

Some string...
4

11 に答える 11

670

echoコマンドには複数のバージョンがあり、動作が異なります。どうやら、スクリプトに使用されているシェルは、を認識しないバージョンを使用しているよう-nです。

このprintfコマンドの動作ははるかに一貫しています。echoのような単純なものには問題ありませんが、より複雑なものecho helloには使用することをお勧めします。printf

どのシステムを使用していて、スクリプトはどのシェルを使用していますか?

于 2012-06-25T16:42:33.530 に答える
180

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"
于 2012-06-28T18:28:40.983 に答える
101

で試してみてください

echo -e "Some string...\c"

(あなたの質問から理解したように)それは私にとって期待通りに機能します。

この情報はmanページから取得したことに注意してください。このmanページには、シェルに独自のバージョンがある可能性があることも記載されていますが、独自のバージョンがあるechoかどうかはわかりませんbash

于 2012-06-25T16:44:52.953 に答える
13

これを達成するために、私が頻繁に使用する基本的に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
于 2019-11-25T19:19:46.573 に答える
3

「read」などの他のコマンドでif内でechoを使用すると、設定が無視され、とにかく新しい行にジャンプする可能性があります。

于 2015-08-07T20:20:03.700 に答える
3

最も人気のあるLinuxディストリビューションであるUbuntuとそのBashの場合:

  1. 使用しているシェルを確認してください。ほとんどの場合、以下が機能します。それ以外の場合は、これを参照してください

    echo $0

  2. 上記が印刷bashされた場合、以下が機能します。

    printf "hello with no new line printed at end"

    または

    echo -n "hello with no new line printed at end"

于 2019-05-22T01:45:07.920 に答える
2
enable -n echo
echo -n "Some string..."
于 2020-03-16T09:29:01.583 に答える
1

私は今あなたの出力が以下のように印刷されると信じています

~ echo -e "String1\nString2"
String1
String2

xargsを使用して、複数行の標準出力を同じ行に入れることができます。

 ~ echo -e "String1\nString2" | xargs
String1 String2

 ~
于 2019-11-25T09:26:18.433 に答える
1

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"いる場所と同等です。

于 2021-06-18T17:15:33.440 に答える
0

シェルスクリプトを作成するときは、常に#!/usr/bin/env bash最初の行として使用してください。

このシェルは、エスケープシーケンスを省略したり操作したりしません。

例:

echo "This is first \\n line"

プリント

This is first \n line.
于 2019-05-24T12:09:02.040 に答える
0

IBM z / OSでも同じ問題が発生したため、 echoの代わりにprintを使用しましたが、機能しました。

print -n "Some string ...."

print —シェルから引数を返します

于 2021-07-26T17:07:24.213 に答える