改行を発行せずに「-n」を印刷するにはどうすればよいですか?


16

コマンド-nを使用して印刷しようとしていますecho。しかし、単に入力するとecho -n、表示されず、改行のみが発行され-n、代わりに改行が発行されます。


動作しますecho -n -- -n(テストに便利なLinuxボックスはありません)?
n0rd

Ubuntuを仮想マシンにインストールしていますが、非常に遅いようです。お待​​ちください。
スターOS

1
私はチェックしました-しません。おそらくそれは、内部bashコマンドだとそれが使用していないためgetopt、解析、コマンドラインに(???)
n0rd

1
この質問はpubs.opengroup.org/onlinepubs/9699919799/utilities/echo.htmlで尋ねられ、回答されます --「-nをエコーする可能性のある適合アプリケーションは、9番目から派生したprintfユーティリティを使用する必要がある」エディションシステム」
ブランディン

私が作った最初の人気のある質問。わーい?
スターOS

回答:


28

問題は、引数をecho解釈-nすることです。デフォルトのbash実装では、それは(からhelp echo)を意味します:

  -n  do not append a newline

それを回避するさまざまな方法があります:

  1. 別のキャラクターを含めることで、オプションではないものにします。たとえばecho、で改行を出力しないように-n指示してから、バックスラッシュエスケープを解釈し-e、明示的に改行を追加するように指示します。

    $ echo -ne '-n\n'
    -n
  2. または、スペースを含めるだけです

    $ echo " -n"
     -n

    ただし、これにより、おそらく不要なスペースが追加されます。

  3. その前に非印刷文字を使用します。ここに。バックスペース(\b)を使用しています

    $ echo -e "\b-n"
    -n

    これはまた、おそらく望まない余分な文字を追加します。

  4. トリックを使用する

    $ echo n- | rev
    -n

    このrevコマンドは、出力を逆に出力するだけです。

  5. 仕事に適したツールを使用する

    $ printf -- '-n\n'
    -n

有効な文字「\」があれば、それは正しいことです。
Pilot6

@ Pilot6ええ、しかし、そのアプローチ(あなたと私のもの)の問題は、余分なキャラクターを追加することです。これにより、将来問題が発生する可能性があります。特に、それを解析してのようなものを試したい場合は特にそうですgrep '^-n'pritnf本当に行く方法です。
テルドン

まあ、printfとにかく良いですが、質問はちょうどに関するものですecho
Pilot6

2
まさにそのように見えますecho -e "-n\c"
パイロット6

1
\cさらなる出力の抑制
-Pilot6


7

このコマンドを使用できますが、余分なスペースが追加されます。

echo -e  "\r-n"

これは一種のハックです。

-e バックスラッシュコマンドシンボルを有効にします。

\r キャリッジリターンです。

実際\、文字列の任意の場所で有効な文字が実行されます。

どちらが有効かはで確認できますhelp echo

echo "-n"はの-nパラメータとして使用されているため機能しませんecho

PS私見は最高のソリューションです

echo -e "-n\c"

余分な文字は追加されません。

echo -e "-n\n"

同じものを改行文字で出力します。


1
わー!これは私のものよりも優れています。「初心者」のために少し説明してもらえますか;
サディ

おかげで、キャリッジリターンをどこで追加しても、最初でも最後でも問題ないことに気付きました。
サディ

@Sadiはい、それは何かを追加すると無効なオプションになるためです。-nは有効であり、-nfoo印刷されません。
terdon

@terdonにman echoもあります。しかしhelp、少し良いです。
パイロット6

私はそれがそれを持っていることを知っています、それはただ関連しません。/bin/echoはまったく異なるものでありecho、bashで実行すると、シェルに応じてまったく異なる組み込みコマンドを取得します。
テルドン

5

間違いなく使用したいechoだけなら、これで満足できるはずです。

echo "-n "

これ-nは、while がの有効なオプションでありecho-nその後にスペースがないために機能します。これはオプションではないため、echo印刷するだけです。


ここのほとんどの視聴者は、「-n」ではなく「-n」のみが必要な場合があります。
スターOS

5

あなたたちは本当にそれを考え直しています。

 echo -e \\055n

または末尾の改行なし

 echo -en \\055n

どうprintf "-n\n" 思いますか?
ドミトリーグリゴリエフ

うん、私はこのように答えました。回答を削除します。これは、ビルトインエコーで動作するという点で比較的移植性があり/bin/echo、少なくとも次のように呼び出された場合echo -e "\055n"
-abligh

-enは私が欲しいものではありません。
スターOS

2

@ABの答えを拡張するための唯一の移植可能な使用方法echoは、などのオプションの使用を控えることです-nprintf可能な場合は代わりに使用することを検討してください。このリファレンスページでは、より詳細な情報を提供し、いつ、どのように、どのように使用すべきかechoを非常によく説明していますprintf

現在、echo(1)は、フラグとエスケープシーケンスを省略した場合にのみ移植可能です。プレーンテキスト以外のものが必要な場合は、代わりにprintf(1)を使用してください。


答えを拡張するつもりです。答えを編集してください。
スターOS

元の著者よりも私からのテキストが多くなるという点について、他の誰かの答えを変更することは良い考えだとは思いません。
ドミトリーグリゴリエフ

2

Bashスクリプトでは、次を実行できます。

echo -n -
echo n

または対話型シェルで:

echo -n - ; echo n

これecho-キャラクターとnキャラクターです。


やってみた?違います。
パイロット6


最初のコマンド出力-pilot6@Pilot6:~$。2番目の出力n
パイロット6

@ Pilot6質問で指定されていない対話型端末またはbashスクリプトのどちらで実行しているかによって異なります。OTOHターミナルで必要な場合は、2行を単純に組み合わせるだけです。&&この答えが間違っているとは言いません。
user12205

これを編集して、bashスクリプトの場合よりも明確になるようにします。
スターOS

1

他の3つの方法:

$ echo -e '\x2dn' # ASCII hexadecimal value
-n
$ echo -e '\u002dn' # Unicode code point
-n
$ echo -e '\u2dn' # Unicode code point shortened
-n

0

走れます

printf -n;echo

Busybox Ashでテスト済み


灰?灰?ポケットモンスターどういう意味?
スターOS

'busybox ash'を実行しました
ジウォペン

「Busybox」または「Busybox Ash」と言います。人々がそのポケモンキャラクターや火山からの*******灰を考えるかもしれないので、「アッシュ」だけではありません。
スターOS

より良い。alt255alt255
スターOS

@StarOS ashはAlmquist Shellの名前です。
ムル
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.