Как сообщил OP в комментариях, они вызывали скрипт с sh file.sh
. В зависимости от оболочки по умолчанию, к которой привязана символическая ссылка / bin / sh
, она может не поддерживать символы Unicode.
Например, в Ubuntu оболочка по умолчанию - тире
.
$ 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