`echo`で "-n"を印刷する方法は?

`echo`で "-n"を印刷する方法は?

30年以上経過したこのコマンドで "-n"文字列を印刷する方法がわかりませんecho

私はこれを試しました:

Michaels:Scripts$ echo -n
Michaels:Scripts$ echo "-n"
Michaels:Scripts$ echo -e "-n"
Michaels:Scripts$ echo -- -n
-- -n
Michaels:Script$ echo -- "-n"
-- -n
Michaels:Script$ echo "\-n"
\-n

私はMac OS X MLを使用しています。私はこのような行動が非常に奇妙で予想外のものだと思います。

答え1

これを使用したくない場合は、prinf少なくとも次のSO Q&Aに応じていくつかのオプションがあります。echo "-n"は-nを印刷しませんか?

これが最善の選択のようです:

$ echo "x-n" | cut -c 2-
-n

またはいくつかの変形があります。

$ echo -- '-n'|cut -d" " -f2
-n

印刷機能

printfそのような問題はありません:

$ printf "%s\n" -n
-n

答え2

なぜ使用すべきですかecho使用printf:

printf -- '-n\n'

または:

printf '%s\n' -n

そしてecho

echo -n

-n<LF>出力はUNIXと一致しますecho

bashdashGNU、またはzshecho(ほとんどのシステムの基本構成)は、次の方法で達成できます。

echo -en '-n\n'

または(ASCIIベースのシステムの場合):

echo -e '\055n'

Zshは次のechoことでこれを行うことができます。

echo - -n

または(このbsdechoオプションが有効になっていないと仮定):

echo '\u002Dn'

魚はこんなecho感じ

echo -- -n

KshとZshは次のprintことでこれを行うことができます。

print - -n

または:

print -- -n

bash(ただしzsh)、posixxpg_echoが同時にアクティブになっていないとします。

echo -n -; echo n

興味深いことに、POSIX方式では出力することは不可能です-nechoつまり、UnicesとUnixファミリーの間にある程度移植可能)。これは、最初の引数にバック-nスラッシュ文字が含まれている場合に動作が指定されていないためです。

答え3

歴史的な理由から、オプションの終わりを示す信号を除いて、で始まるすべてのパラメータはオプションであるecho一般的な種類のパラメータ解析は実行されません。このコマンドはほとんどの場合、引数を変更せずに印刷しますが、UNIXバリアント、シェル、およびシェルの構成方法に応じていくつかのオプション(、、、、)を解釈し、バックスラッシュ+文字を特別に処理できます。---echo-e-E-n-

-n自分で印刷できるポータブルな方法はありませんecho。特殊文字を気にせずに文字列を印刷する移植可能な方法は次のとおりです。

printf %s -n

またはより一般的にprint %s "$somestring"。文字列の後に最後の改行文字を印刷するにはprintf '%s\n' -n

答え4

最初の 2 つの記号で「-n」が必要な場合は、次のようにします。

echo -e '\r-n'

別の方法:

echo -n '-'; echo 'n'

関連情報