Если вы посмотрите внимательно, вы увидите, что он печатает:
echo: command not found
с начальным пробелом, а не:
echo: command not found
set -x
делает это намного понятнее при печати:
$'\302\240echo' THE_REBOUND
0302 0240
является восьмеричным UTF-8 для неразрывного пробела .
Попробуйте удалить пробел между |
и echo
и введите обычный пробел.
Скорее всего, файл был отредактирован на Mac, где можно случайно ввести неразрывный пробел, если вы нажмете Option одновременно с Пробел .
Если вы используете Vim, вы можете сделать неразрывные пробелы более очевидными, используя опцию listchars . Например:
set listchars+=nbsp:% list
См. . В Vim выделены подозрительные символы , чтобы узнать больше идей.
В Linux неразрывным пробелом является Составить Пробел Пробел или Ctrl + Shift + u a 0 , так что вы, вероятно, не наберете это случайно.
Для всех, кто хочет, можно вручную преобразовать восьмеричные байты в UTF-8, используя таблицу UTF-8 из статьи Википедии об UTF-8.
Но самый простой способ, который я нашел, это использовать Python:
>>> import unicodedata
>>> unicodedata.name('\302\240'.decode('utf-8'))
'NO-BREAK SPACE'