Linuxのシェルに-e
は、echo
コマンドのフラグが存在しないように思えます。これはめちゃくちゃな設定ですか、それとも「通常」ですか?
例としてのコード:
#!/bin/sh
echo -e "\e[3;12r\e[3H"
プリント:
-e \e[3;12r\e[3H
これは以前に機能しました!いくつかのstty
コマンドがひどく間違っていて、今はもう機能しないと思います。誰かが私sh
が実際にちょうどであると提案しましたbash
。
Linuxのシェルに-e
は、echo
コマンドのフラグが存在しないように思えます。これはめちゃくちゃな設定ですか、それとも「通常」ですか?
例としてのコード:
#!/bin/sh
echo -e "\e[3;12r\e[3H"
プリント:
-e \e[3;12r\e[3H
これは以前に機能しました!いくつかのstty
コマンドがひどく間違っていて、今はもう機能しないと思います。誰かが私sh
が実際にちょうどであると提案しましたbash
。
回答:
あなたが使ったのsh
ではないbash
ので、echo
コマンドインにsh
オプションがありません-e
。sh
マンページから:
echo [-n] args...
Print the arguments on the standard output, separated by spaces.
Unless the -n option is present, a newline is output following the
arguments.
そして、それもありません\e
:
If any of the following sequences of characters is encountered
during output, the sequence is not output. Instead, the specified
action is performed:
\b A backspace character is output.
\c Subsequent output is suppressed. This is normally used at
the end of the last argument to suppress the trailing new‐
line that echo would otherwise output.
\f Output a form feed.
\n Output a newline character.
\r Output a carriage return.
\t Output a (horizontal) tab character.
\v Output a vertical tab.
\0digits
Output the character whose value is given by zero to three
octal digits. If there are zero digits, a nul character
is output.
\\ Output a backslash.
All other backslash sequences elicit undefined behaviour.
sh
実装はサポートしますecho -e
、bash
サポートしないようにコンパイル時に言うことができますecho -e
。その特定のsh(おそらくdash
)はサポート-e
してbash
いないのに、その特定のshはサポートしているだけです。
-e
はPOSIXではありません(実際、POSIXエコーは一般にオプションを受け入れませんが(サポートは許可されていますが-n
)、こちらを参照)、/bin/sh
システム上ではPOSIXシェルのように見えます。-e
はいくつかのシェルで受け入れられる拡張機能ですが、それに依存するべきではなく、移植性がありません。理想的には、を使用するprintf
か、を持つシェルを使用するように切り替えますecho -e
。
また、\e
以下のコメントの注意事項も参照してください\033
。
printf '\033[3;12r\033[3H'
sh
も認識しません\e
。使用\033
いつでも、ほとんどすべてのシェルで、type echo
またはを入力することで、どの「エコー」が呼び出されるかを判断できることに注意してくださいwhich echo
。通常、シェル組み込みです。そのため、どの「echo」がインストールされているか、どのシェルを使用しているかによって異なります。
which echo
使用しないでくださいwhich
。通常は外部バイナリであるため、組み込みを使用しているかどうかはわかりません。type
しかし、良いです。
type which
またはによって明らかにされますwhich which
)。;)
echo
/bin/sh
dash
(カーネルとしてLinuxまたはFreeBSDを使用できるオペレーティングシステム)で提供されるシェルのビルトインがあります。