1

Я пытаюсь запустить очень простой скрипт на нескольких разных платформах:

#!/bin/bash
STRING="this is a test"
echo $STRING

, и я не могу сказать, почему на Mavericks и Yosemite я получаю вывод:

./starter.sh line 2: is": command not found

в то время как онлайн-симулятор терминала Bash (извините, у меня нет удобной установки Linux, поэтому я использую: это) запускает код, как и ожидалось. Согласно собственным учебникам по Apple, это должно работать. IOW, двойные кавычки просто игнорируются.

Несколько моментов:

  • между именем переменной, оператором равенства и присвоенным значением нет пробелов;
  • Выход из пробелов не является правильным ответом в моем случае, так как конечная цель состоит в том, чтобы сделать несколько более сложных сценариев ... но, очевидно, я должен "закончить" этот маленький шаг в первую очередь.

2 ответа2

2

Сообщение об ошибке не совсем верно, но оно очень похоже на то, что вы получите, если в скрипте будут двойные кавычки (или "умные") вместо простых (ASCII) двойных кавычек. Оболочка не понимает причудливых кавычек, поэтому сценарий будет вести себя очень странным образом. Попробуйте распечатать ваш скрипт с:

LC_ALL=c cat -vet starter.sh

Это покажет любые странные (не обычные ASCII или непечатные) символы в файле. Если он печатает что-то вроде:

#!/bin/bash$
STRING=?M-^@M-^\this is a test?M-^@M-^]$
echo $STRING$

... "?М - ^ @ М - ^\"а"?M - ^ @ M- ^] "- это причудливые кавычки в кодировке UTF-8. С другой стороны, если строки файла заканчиваются на «^ M $» вместо просто «$», то Sleafar прав, и у вас есть файл в формате DOS/Windows.

1

Проверьте, что используется в качестве "конца строки" в вашем файле. Различные системы используют разные управляющие символы:

  • Linux: LF
  • Windows: CR+LF
  • Mac: CR

Вы не можете использовать один и тот же скрипт на всех системах без его конвертации.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .