-eオプションを含むエコーがコマンドラインでshスクリプトとは異なる動作をするのはなぜですか?

-eオプションを含むエコーがコマンドラインでshスクリプトとは異なる動作をするのはなぜですか?

LinuxMint 17.2、カーネル4.4.0-97 - 一般を使用します。私は以下を含む小さなTestEcho.shスクリプトを作成しました。

#!/bin/bash
echo -e "\e[1;31m Text in Color \e[0m\n"
for code in {33..43}; do echo -e "\e[38;05;${code}m $code: Text in Color"; done ; echo "";

このecho -eコマンドは、コマンドラインで実行されたときに予想される出力を提供します。つまり、エスケープコードを解釈し、テキストを色で表示します。

.shスクリプトの同じコマンドは、オプションを無視してリテラルテキストとして表示されるようechoです。また、forループが破損しているようです。何がこれの原因ですか?さらに重要なのは、スクリプトを修正する方法です。-e-eecho -e

回答bash(George Vasiliouに感謝します):代わりにスクリプトを実行してください。sh

$ bash ~/Download/TestEcho.sh

cmdlineのecho -eとshスクリプトのecho -e

ベストアンサー1

bashとshは異なるタイプのシェルです。 bashはshよりも最新でスマートです。スクリプトで作成した内容は、シェルを使用して実行されることを意味します#!/bin/bashbashただし、これはシェルを使用してsh ~/Download/TestEcho.sh実行されます。sh

おすすめ記事