Чтобы проверить, установлена ли переменная, см. Как проверить, существует ли переменная в операторе 'if'?([ -v "Var${i}Value" ]
(ksh
/ zsh
/bash
)илиeval "[ -n \"\${Var${i}Value+set}\" ]"
(POSIX )).
Теперь, чтобы перебрать переменные, имена которых соответствуют шаблону, в zsh
вы можете выполнить:
for varname in ${(Mk)parameters:#Var<->Value}; do
something with "$varname" and its value: "${(P)varname}"
done
Чтобы обработать их в числовом порядке, добавьте флаг раскрытия параметра n
(и измените Mk
наMkn
).
Сbash
:
readarray -t list < <(compgen -v | grep -xE 'Var[[:digit:]]+Value')
for varname in "${list[@]}"; do
something with "$varname" and its value: "${!varname}"
done
Или заменить readarray
на split+glob, чтобы избежать использования массива:
IFS=$'\n' # split on newline
for varname in $(compgen -v | grep -xE 'Var[[:digit:]]+Value'); do
something with "$varname" and its value: "${!varname}"
done
Чтобы обработать их в числовом порядке и предполагая, что ваш sort
является GNU sort
, направьте вывод grep
в sort -V
.
Думай иначе:
Каждый процесс имеет несколько файловых дескрипторов. Первые три из них, по соглашению, это stdin, stdout и stderr.
Когда вы запускаете процесс, вы можете «указывать» эти дескрипторы в разные места.
Когда вы запускаете оболочку в IDE, IDE указывает на консоль, которую предоставляет IDE.
Когда вы запускаете оболочку в xterm, xterm указывает им на взаимодействие окна/клавиатуры, которое обеспечивает xterm.
Когда вы запускаете оболочку через последовательный порт (, общий для встраиваемых систем ), они указывают на последовательный порт.
Когда вы запускаете оболочку из оболочки и перенаправляете их, вы можете указать им файл.
Таким же образом, когда вы запускаете какой-либо другой процесс (программу )из оболочки, вы можете перенаправить stdin и stdout для этой программы, например.через >
и <
.
«STDIN относится к приглашению командной строки». без разницы. Вы можете сказать, что сам процесс оболочки имеет эти дескрипторы, они относятся к тому, что было установлено при вызове оболочки, и оболочка может наследовать их другим программам, которые запускаются из оболочки (, или использовать другие для этих ). ].