シェルスクリプトでチェックマークと十字マークを印刷したいです。
#!/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