web-dev-qa-db-ja.com

改行を発行せずに「-n」を印刷する方法は?

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

16
Star OS

問題は、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
    
28
terdon

適切なツールを使用することをお勧めします。代わりにprintfを使用できます:

% printf "-n\n"       
-n
15
A.B.

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

echo -e  "\r-n"

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

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

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

実際には、\の有効な文字は、文字列のどの場所でも使用できます。

help echoで有効なものを確認できます。

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

P.S。私見の最良の解決策は

echo -e "-n\c"

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

echo -e "-n\n"

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

7
Pilot6

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

 echo -e \\055n

または末尾の改行なし

 echo -en \\055n
5
Joshua

echoのみを使用したい場合は、これで満足できるはずです。

echo "-n "

これは、-nechoの有効なオプションであるが、-nの後ろにスペースがあるため有効です。これはオプションではないため、echoは単に出力します。

5
Sadi

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

echo -n -
echo n

またはインタラクティブシェルで:

echo -n - ; echo n

このechoesは-文字とn文字です。

2
jiwopene

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

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

2

他の3つの方法:

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

走れます

printf -n;echo

Busybox Ashでテスト済み

0
jiwopene