コマンド-n
を使用して印刷しようとしていますecho
。しかし、単に入力するとecho -n
、表示されず、改行のみが発行され-n
、代わりに改行が発行されます。
getopt
、解析、コマンドラインに(???)
コマンド-n
を使用して印刷しようとしていますecho
。しかし、単に入力するとecho -n
、表示されず、改行のみが発行され-n
、代わりに改行が発行されます。
getopt
、解析、コマンドラインに(???)
回答:
問題は、引数を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
grep '^-n'
。pritnf
本当に行く方法です。
printf
とにかく良いですが、質問はちょうどに関するものですecho
。
echo -e "-n\c"
。
\c
さらなる出力の抑制
適切なツールを使用することをお勧めします。printf
代わりに使用できます:
% printf "-n\n"
-n
echo
ながら、printf
より良い標準化されています。
このコマンドを使用できますが、余分なスペースが追加されます。
echo -e "\r-n"
これは一種のハックです。
-e
バックスラッシュコマンドシンボルを有効にします。
\r
キャリッジリターンです。
実際\
、文字列の任意の場所で有効な文字が実行されます。
どちらが有効かはで確認できますhelp echo
。
echo "-n"
はの-n
パラメータとして使用されているため機能しませんecho
。
PS私見は最高のソリューションです
echo -e "-n\c"
余分な文字は追加されません。
echo -e "-n\n"
同じものを改行文字で出力します。
-n
は有効であり、-nfoo
印刷されません。
man echo
もあります。しかしhelp
、少し良いです。
/bin/echo
はまったく異なるものでありecho
、bashで実行すると、シェルに応じてまったく異なる組み込みコマンドを取得します。
あなたたちは本当にそれを考え直しています。
echo -e \\055n
または末尾の改行なし
echo -en \\055n
printf "-n\n"
思いますか?
/bin/echo
、少なくとも次のように呼び出された場合echo -e "\055n"
@ABの答えを拡張するための唯一の移植可能な使用方法echo
は、などのオプションの使用を控えることです-n
。printf
可能な場合は代わりに使用することを検討してください。このリファレンスページでは、より詳細な情報を提供し、いつ、どのように、どのように使用すべきかecho
を非常によく説明していますprintf
。
現在、echo(1)は、フラグとエスケープシーケンスを省略した場合にのみ移植可能です。プレーンテキスト以外のものが必要な場合は、代わりにprintf(1)を使用してください。
Bashスクリプトでは、次を実行できます。
echo -n -
echo n
または対話型シェルで:
echo -n - ; echo n
これecho
は-
キャラクターとn
キャラクターです。
-pilot6@Pilot6:~$
。2番目の出力n
。
&&
この答えが間違っているとは言いません。
echo -n -- -n
(テストに便利なLinuxボックスはありません)?