Ошибка bash на eval, содержащем пустое пространство

Мне нужно запустить параметр передачи bash с помощью формата [variable_name = "value"] следующим образом:

./test.sh ip='164.130.21.98' hostname='whatever' pwd='/test' ftpcmd='CWD debug' user='stefano' 

В скрипте test.sh я хочу присвоить любой переменной соответствующее значение:

 #!/bin/bash eval `echo "$@"` echo $ftpcmd 

Но я получаю prova: command not found ошибка.

Я почти новичок в сценариях оболочки bash, и я не могу понять, что не так в моем параметре ftpcmd='CWD debug' ни как я должен его написать.

Если я попытаюсь заменить eval объявлением, тогда $ftpcmd будет установлен только для CWD вместо CWD debug как я ожидаю.

  • Двойные кавычки в bash
  • как найти файл с именем, не указанным в bash?
  • Разделить одну строку в массив символов, используя ТОЛЬКО bash
  • понимание значения по умолчанию IFS
  • Восстановить удаленные команды из истории?
  • Удалить завершающую новую строку из «буфера обмена», чтобы предотвратить выполнение на терминале?
  • Поддерживать имена файлов в виде отдельных аргументов в последовательных командах
  • Ожидает применения инструмента для платформы ARM
  • One Solution collect form web for “Ошибка bash на eval, содержащем пустое пространство”

    Если вы поставили задания перед скриптом

     ip='164.130.21.98' hostname='whatever' pwd='/test' ftpcmd='CWD debug' user='stefano' ./test.sh 

    переменные доступны в среде сценария. Параметр -k рассматривает все назначения, а не только назначения перед командами, как изменения среды.

     set -k ./test.sh ip='164.130.21.98' hostname='whatever' pwd='/test' ftpcmd='CWD debug' user='stefano' set +k 

    В любом случае eval вообще не требуется и может быть удален.

    Linux и Unix - лучшая ОС в мире.