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
。
bash
、dash
GNU、またはzsh
echo(ほとんどのシステムの基本構成)は、次の方法で達成できます。
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
)、posix
とxpg_echo
が同時にアクティブになっていないとします。
echo -n -; echo n
興味深いことに、POSIX方式では出力することは不可能です-n
(echo
つまり、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'