
В скрипте оболочки у меня есть список переменных, которые я упорядочил как $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
оператора не заканчиваются новой строкой.