Ошибка команды при назначении переменной Bash

Поскольку это популярная ошибка, проверьте PHPMailer Wiki на устранение неполадок.

Также это сработало для меня

$mailer->Port = '587';

468
задан codeforester 8 August 2018 в 21:01
поделиться

3 ответа

Нельзя ставить пробелы вокруг знака '='.

Когда вы пишете:

STR = "foo"

bash пытается выполнить команду с именем STR с 2 аргументами (строки '=' и 'foo')

Когда вы пишете:

STR =foo

bash пытается выполнить команду с именем STR с 1 аргументом (строка '=foo')

Когда вы пишете:

STR= foo

bash пытается выполнить команду foo с STR, установленным в пустую строку в окружении.

Я не уверен, помогает ли это прояснить ситуацию или это просто обфускация, но обратите внимание, что:

  1. первая команда точно эквивалентна: STR "=""foo",
  2. вторая такая же, как STR "=foo",
  3. а последняя эквивалентна STR="" foo.

Соответствующий раздел спецификации языка sh, раздел 2.9.1 гласит:

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

В этом контексте слово - это команда, которую собирается выполнить bash. Любая строка, содержащая = (в любой позиции, кроме начала строки), которая не является перенаправлением, является присвоением переменной, а любая строка, которая не является перенаправлением и не содержит =, является командой. В STR = "foo", STR не является присвоением переменной.

882
ответ дан 22 November 2019 в 22:39
поделиться

Уберите пробелы вокруг знака = :

#!/bin/bash 
STR="Hello World" 
echo $STR 
154
ответ дан 22 November 2019 в 22:39
поделиться

В интерактивном режиме все выглядит нормально

$ str="Hello World"
$ echo $str
Hello World

Очевидно! как сказал Йоханнес, вокруг знака "=" нет места. Если вокруг '=' есть пробел, то в интерактивном режиме он выдает ошибку: `

Команда 'str' не найдена

5
ответ дан 22 November 2019 в 22:39
поделиться