回答:
echoBashおよびdash(/bin/sh)に組み込まれたシェルです。echoコマンドラインから実行する場合はBashビルトインを使用し、シェルスクリプトをsh実行する場合はDashビルトインを使用します。
のダッシュバージョンはオプションをecho認識しませんが、シーケンスの-e特別な処理を行わずにそのまま出力し\ます。
Bashを使用してシェルスクリプトを実行するか、次の/bin/echo代わりに使用しますecho。
/bin/echo -e "\e[1;31mThis is red text\e[0m"
異なるバージョンの問題を回避するには、代わりechoに使用することをお勧めしますprintf。対照的に、echo printf常に\シーケンスを解釈しますが、最後に改行を自動的に追加しないため、必要な場合は最後に追加する必要があります\n。
の一部のバージョンはprintf理解\eできないため、\033代わりに使用する必要があります。
printf "\033[1;31mThis is red text\033[0m\n"
で実行しないでください。それはsh test.shあなたが言ったようにテキストを白い色で印刷します。スクリプトを作成した後、実行して実行可能にします。
sudo chmod +x /path/test.sh

sudo、like sudo ./test.shまたは./test.sh両方でスクリプトを実行します。
または
でスクリプトを実行しbash、
bash /path/test.sh
chmod a+x test.shと、テキストが読み取り色で印刷されます。違いはなんですか。linuxで何が起こったのか./test.shと等しいはずsh test.shですか?
#! /bin/bash使用する必要がありますのでbash test.sh
.現在のディレクトリも意味します。
./test.sh、最後に実行します。スクリプトは.、現在のディレクトリ内にある場合にのみ実行してください。
/bin/echodash(/bin/sh)およびbash;echobashまたは./tes.sh両方で正しく動作します。以下のコードはでbashのみ動作します。if [$ UID -ne 0]; 次に「rootユーザーではない」をエコーする、「rootユーザーではない」エコーをエコーする