Как сократить список имен переменных в bash?

Как сократить список имен переменных в bash?

В скрипте оболочки у меня есть список переменных, которые я упорядочил как $a, $b, $c и т. д. Я хотел бы вывести эти переменные без необходимости перечислять все переменные. Мой текущий код выглядит следующим образом:

a=1
b=2
c=3
d=4
e=5
f=6
g=7

for x in $a$b$c$d$e$f$g
do
  echo "$x"
done

Могу ли я сократить $a$b$c$d$e$f$g до чего-то, что будет относиться к буквам от $a до $g?

решение1

Использование «зла» eval:

eval echo \"$(printf '$%s' {a..g})\"

Обратите внимание, что я использовал экранированные кавычки, которые необходимы для корректного вывода, если ваши переменные должны содержать пробелы.


Или используйте исправленный цикл forпервый ответ:

for x in {a..g}; do printf "${!x}"; done


Или используйте массив в вашем скрипте. Это другой синтаксис, но его легче обрабатывать, если вам нужны все значения сразу. Вот небольшой пример:

array=(1 2 3 4 x 6)
array+=(7)  # add one more
array[4]=5  # modify element at index 4
printf '%s' "${array[@]}"

Обратите внимание, что последние два printfоператора не заканчиваются новой строкой.

Связанный контент