シェルスクリプトでチェックマーク/クロスマークを印刷する

シェルスクリプトでチェックマーク/クロスマークを印刷する

シェルスクリプトでチェックマークと十字マークを印刷したいです。

#!/bin/bash

echo -e "\xE2\x9C\x94 existing"
echo -e "\xE2\x9D\x8C missing"

なぜこれがうまくいかないのですか?

ベストアンサー1

コメントでOPが明らかにしたように、彼らはsh file.sh/bin/sh

たとえば、Ubuntuでは、デフォルトのシェルはdash

$ dash
$ printf "\xE2\x9C\x94 missing\n"
\xE2\x9C\x94 missing
$ echo -e "\xE2\x9C\x94"
-e \xE2\x9C\x94

対話型シェルからコマンドを呼び出すときに機能する理由は、デフォルトではユーザー対話型シェル(Ubuntuの場合)によるものです。/bin/bash

スクリプトを正しく実行するには、次のものが必要です。

  • 次のように実行./file.sh
  • 正しいシェルの引数として実行します。bash file.sh

あるいは、シェルに依存しないアプローチが可能である。

# this printf is standalone program, not shell built-in
$ /usr/bin/printf "\xE2\x9C\x94 check mark\n"
✔ check mark

$ python -c 'print "\xE2\x9C\x94 check mark"'
✔ check mark

$ perl -e 'print "\xE2\x9C\x94 check mark"'                                                                              
✔ check mark

おすすめ記事