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

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

файл

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" 

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

  • Как «find -exec» передает имена файлов с пробелами?
  • как разделить буферизацию на меньшие файлы csv
  • GDB не может выполнить мою тестовую программу
  • Использование переменной для выполнения команды curl
  • Как имитировать взаимодействие пользователя при запуске другого скрипта
  • как разрешить sudo fork bash вместо sh?
  • Какие специальные параметры оболочки (bash)?
  • Игнорировать все совпадения для отрицательного шаблона extglob в рекурсивном ls
  • В сценарии проверьте, не поступает ли стандартный ввод из файла или канала
  • Как избежать одиночной цитаты?
  • Почему tmux запускается медленнее и медленнее с течением времени?
  • Как разбить файл, например split на stdout, для подключения к команде?
  • Linux и Unix - лучшая ОС в мире.