Как назначить переменную из другой переменной в отдельном файле

У меня есть файл с кучей переменных, таких как:

файл

DEVICE0_USB="usbSerialNo1" DEVICE1_USB="usbSerialNo2" 

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

скрипт

 FAX_MACHINE_USB=$DEVICE0_USB COFFEE_MAKER_USB=$DEVICE1_USB 

так что когда я echo $FAX_MACHINE_USB я получаю usbSerialNo1

Я могу использовать source чтобы получить переменные из файла, но это также будет запускать каждую строку в файле . В моем случае это не проблема, поскольку файл имеет только объявления переменных, но я по-прежнему предпочитаю не делать этого. Есть ли другой способ его достижения?

One Solution collect form web for “Как назначить переменную из другой переменной в отдельном файле”

Кажется, подобный вопрос был дан здесь .

Конечно, вы можете использовать . или source чтобы назначить переменные, если вам удобно, но вы также можете использовать awk или grep для запуска только определенных строк из файла, которые выглядят как переменные declerations.

Как обрабатывать многие переменные

Если вы хотите script1.sh все переменные, назначенные в script1.sh , рассмотрите:

 source <(grep -E '^\w+=' script1.sh) 

Это использует grep для извлечения всех строк из script1.sh которые выглядят как назначения переменных. Эти строки затем запускаются в текущей оболочке, назначая переменные.

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

Рассматривая фрагменты в свою очередь:

  • source file сообщает оболочке выполнить file в текущей оболочке.

  • <(...) называется подстановкой процесса. Это позволяет нам использовать вывод команды вместо имени файла.

  • Команда grep -E '^\w+=' script1.sh извлекает все строки, которые кажутся переменными назначениями. Если вы запустите эту команду самостоятельно в командной строке, вы увидите что-то вроде:

     variable="Hello" var2="Value2" 

    и так далее. Вы должны сделать это сначала и проверить вывод, чтобы убедиться, что это строки, которые вы хотите выполнить.

  • Systemd: как запустить / остановить скрипт Python, который должен работать в фоновом режиме, внутри Virtualenv
  • Как скопировать структуру каталогов, но игнорировать символические ссылки?
  • матч и замена в PNG-файле
  • Как удалить элемент из списка?
  • Генерация случайных чисел в Solaris?
  • Что делает `set $ variable`?
  • Отфильтруйте содержимое буфера обмена без использования промежуточного файла
  • Как присвоить значение переменной внутри цикла for в bash?
  • Как начать работу с bash?
  • Какие оболочки (если они есть) не позволяют сразу считывать heredocs в памяти?
  • встроенная функция экспорта bash
  • Linux и Unix - лучшая ОС в мире.