«STR: команда не найдена» при назначении значения переменной

9

Я ввел следующие строки в скрипт оболочки под названием «test.sh»:

#!/bin/bash
echo Hello World
STR=”Hello Again
echo $STR

После выполнения chmod в исполняемом файле я запустил скрипт ./test.sh. Тем не менее, я получаю сообщение

./test.sh: line 3  STR: Command not found

Что я делаю неправильно?

Джей Сильвер
источник
1
Ответ Тердона решил ваш вопрос? Если нет, возможно, у вас случайно есть пробелы вокруг присваивания переменной.
Arronical
@Voker - просто стилистический комментарий, основанный на моем предложении : я думаю, что лучше использовать Blockquote для сообщений об ошибках вместо Code code; в конце концов, это не код, а некоторый текст, возвращаемый интерпретатором Bash.
Федорки
@Fedorqui почему? Quote блоки не сохраняют форматирование, они интерпретируют специальные символы (например *, _, #), а уценки и предоставляются по- разному программное обеспечение для чтения с экрана. Я думаю, что все, что либо дано, либо получено компьютером, должно быть в блоках кода. Вы никогда не знаете, когда точный формат может иметь значение. Особенно когда имеешь дело с такими вещами, когда в игру вступает юникод.
тердон
@terdon это действительно зависит от случаев, и даже есть запрос на добавление формата для журналов / предупреждений / сообщений об ошибках, который позволяет переносить слова и сохраняет переводы строки . Для меня, если это просто строка, подобная этому случаю, я предпочитаю блоки цитат, так как это облегчает понимание того, что такое код и что такое ошибки.
Федорки
@fedorqui Полагаю, нам следует перейти к мета, но я всегда предпочитаю шрифт с фиксированной шириной и точное воспроизведение формата всякий раз, когда публикуете сообщение, которое либо прочитано, либо создано компьютером.
тердон

Ответы:

20

Что вы используете для создания этого скрипта? Символы цитаты в вашем вопросе неверны. Это не обычные двойные кавычки ( "), но . Обычные цитаты:

$ uniprops '"' | head -1
U+0022 "› \N{QUOTATION MARK}

Пока ваши

$ uniprops '”' | head -1
U+201D ‹”› \N{RIGHT DOUBLE QUOTATION MARK}

Так что, используйте обычные кавычки, и все будет в порядке:

#!/bin/bash
echo Hello World
STR="Hello Again"
echo "$STR" ## Get into the habit of ALWAYS quoting your variables as well
terdon
источник
Спасибо за ответ, Тердон. Двойные кавычки в файле верны, сообщение было отправлено по электронной почте.
Джей Сильвер
1
unipropsвыглядит круто. Я нашел страницу (это наш собственный trist?). Нужно ли скачивать его из исходного кода или он доступен где-нибудь в менеджере пакетов? E: Unable to locate package uniprops
TRiG
1
Я не очень часто использую Perl (совсем). Я просто хочу знать больше, чем минимум о Unicode.
TRiG
1
@TRiG ну, в Ubuntu это так же просто, как sudo apt-get install cpanminus; sudo cpanm Unicode::Tussleи тогда у вас есть unipropsкоманда. Конечно, tchrist написал эту чертову вещь, так что вы можете также спросить его в чате :)
terdon
1
Я с сожалением сталкиваюсь с подобной ерундой все время. Кажется, что у конкретной вики-системы у моего работодателя есть неприятная привычка переводить дефис-минус -U + 002D в дефис U + 2010 ( или аналогичный ). Тогда такие вещи, как uname ‐aперестать работать: - /. Почтовые клиенты часто имеют схожие гнусные привычки - особенно при использовании форматирования HTML - еще одна веская причина, чтобы предпочесть обычные электронные письма.
Цифровая травма