В BASH есть способ прочитать имена переменных из переменной?

Это вопрос bash (отсюда размещение здесь в Unix и Linux)

У меня есть цикл while, который читается из csv; Это выглядит примерно так:

while read NAME PRETTY_NAME DESC; do echo $NAME done < some.csv 

И все работает прекрасно; но мне очень хотелось бы определить имена полей в переменной; как это:

 FIELDS="NAME PRETTY_NAME DESC" while read $FIELDS; do echo $NAME done < some.csv 

но, к сожалению, кажется, что это неприемлемо:

 -bash: read: `NAME PRETTY_NAME DESC': not a valid identifier 

🙁 Любые идеи, если (или желательно как) это возможно?

3 Solutions collect form web for “В BASH есть способ прочитать имена переменных из переменной?”

Я предполагаю, что вы настроили IFS для анализа CSV. По крайней мере, когда я это делаю, я получаю то же сообщение об ошибке, которое вы получаете:

 IFS=, FIELDS="NAME PRETTY_NAME DESC" while read $FIELDS; do echo $NAME done < some.csv 

Это потому, что интерпретатор оболочки read $FIELDS с использованием $IFS , поэтому он ищет , чтобы отделить аргументы; таким образом, NAME PRETTY_NAME DESC заканчивается тем, что интерпретируется как один аргумент вместо трех, и результатом является недопустимое имя идентификатора.

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

 IFS=, FIELDS=(NAME PRETTY_NAME DESC) while read ${FIELDS[@]}; do echo $NAME done < some.csv 

Использовать массивы bash

 FIELDS=(NAME PRETTY_NAME DESC) while read ${FIELDS[@]}; do echo $NAME done < some.csv 

Лучшей практикой является установка IFS в цикле while, поэтому, как только цикл закончен, IFS возвращается к IFS, установленному оболочкой.

 FIELDS="NAME PRETTY_NAME DESC" while IFS="," read -r $FIELDS; do echo $NAME done < some.csv 

Это POSIX-совместимый код.

  • Echo не печатает правильное значение для переменной
  • Каков наилучший способ дистрибутива / оболочки-агностик для установки переменных среды?
  • Заменить одиночные кавычки для строк, разделенных пробелом от переменной
  • Как сохранить вывод сообщения об ошибке psql в переменной bash?
  • Вывод NamingVariable для нескольких файлов в сценарии Bash
  • Установка переменных из оболочки: как их использовать в скрипте?
  • равное сравнение по переменной jq
  • Можно ли ссылаться на глобальную переменную, даже если локальная область существует с тем же именем?
  • Повторное использование выхода grep
  • Назначить фоновый процесс subshell pid переменной
  • Создать текст, соответствующий нескольким назначениям переменных из одной переменной
  • Linux и Unix - лучшая ОС в мире.