echo
コマンドを使用して-n
を印刷しようとしています。しかし、単にecho -n
と入力すると、-n
は表示されず、改行のみが発行され、代わりに改行が発行されます。
問題は、echo
が-n
を引数として解釈することです。デフォルトのbash実装では、それは(help echo
から)を意味します:
-n do not append a newline
それを回避するさまざまな方法があります:
別のキャラクターを含めることで、オプションではないものにします。たとえば、echo
に-n
で改行を印刷しないように指示し、-e
でバックスラッシュエスケープを解釈し、明示的に改行を追加するように指示します。
$ echo -ne '-n\n'
-n
または、スペースを含めるだけです
$ echo " -n"
-n
ただし、これにより、おそらく不要なスペースが追加されます。
その前に非印刷文字を使用します。ここに。バックスペースを使用しています(\b
)
$ echo -e "\b-n"
-n
これはまた、おそらく望まない余分な文字を追加します。
トリックを使用する
$ echo n- | rev
-n
rev
コマンドは、単に出力を逆に印刷します。
ジョブに適したツール を使用します
$ printf -- '-n\n'
-n
適切なツールを使用することをお勧めします。代わりにprintf
を使用できます:
% printf "-n\n"
-n
このコマンドを使用できますが、余分なスペースが追加されます。
echo -e "\r-n"
これは一種のハックです。
-e
は、バックスラッシュコマンドシンボルを有効にします。
\r
はキャリッジリターンです。
実際には、\
の有効な文字は、文字列のどの場所でも使用できます。
help echo
で有効なものを確認できます。
echo "-n"
は、-n
がecho
のパラメーターとして使用されるため機能しません。
P.S。私見の最良の解決策は
echo -e "-n\c"
余分な文字は追加されません。
echo -e "-n\n"
同じものを改行文字で出力します。
あなたたちは本当にそれを考え直しています。
echo -e \\055n
または末尾の改行なし
echo -en \\055n
echo
のみを使用したい場合は、これで満足できるはずです。
echo "-n "
これは、-n
がecho
の有効なオプションであるが、-n
の後ろにスペースがあるため有効です。これはオプションではないため、echo
は単に出力します。
Bashスクリプトでは、次を実行できます。
echo -n -
echo n
またはインタラクティブシェルで:
echo -n - ; echo n
このecho
esは-
文字とn
文字です。
@ A.Bの答えを拡張するために、echo
を使用する唯一の移植可能な方法は、-n
などのオプションの使用を控えることです。代わりにprintf
を使用することを検討してください。 このリファレンスページ は、echo
およびprintf
をいつ、どのように使用すべきかを詳細に説明し、非常によく説明しています。
現在、echo(1)は、フラグとエスケープシーケンスを省略した場合にのみ移植可能です。プレーンテキスト以外のものが必要な場合は、代わりにprintf(1)を使用してください。
他の3つの方法:
$ echo -e '\x2dn' # ASCII hexadecimal value
-n
$ echo -e '\u002dn' # Unicode code point
-n
$ echo -e '\u2dn' # Unicode code point shortened
-n
走れます
printf -n;echo
Busybox Ashでテスト済み