Обработка пробелов в OS X против Linux в Bash

1

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

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

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

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

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

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

  • между именем переменной, оператором равенства и присвоенным значением нет пробелов;
  • Выход из пробелов не является правильным ответом в моем случае, так как конечная цель состоит в том, чтобы сделать несколько более сложных сценариев ... но, очевидно, я должен сначала пройти этот небольшой этап.
elder elder
источник
Я думаю, что у вас есть скрытый управляющий персонаж или что-то после. Это прекрасно работает на моем Mac с Yosemite. Откройте файл в vim и наберите :set list,
yoonix
Спасибо, @yoonix, я был уверен, что мои пробелы были правильными, но это deff. направил меня в правильном направлении.
elder elder

Ответы:

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

Gordon Davisson
источник
1
Спасибо, Гордон Дэвиссон, вот и все! Увидев комментарии двух других пользователей, я покопался еще немного и обнаружил «причудливые цитаты», которые, IMHO, несколько неудачная идея от Apple по умолчанию. (Спасибо всем за то, что направили меня в правильном направлении.) Это: apple.stackexchange.com/questions/120486/... может помочь любому, кто хочет отключить этот механизм.
elder elder
1

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

  • Linux: LF
  • Окна: CR+LF
  • Mac: CR

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

Sleafar
источник
Это очень хороший момент, даже если он не применим в моем случае; признателен, тем более что ваш комментарий также дал мне некоторые подсказки, позже подтвержденные ответом Гордона.
elder elder