Сколько STDIN существует в сеансе оболочки?

Чтобы проверить, установлена ​​ли переменная, см. Как проверить, существует ли переменная в операторе '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.

0
03.07.2020, 09:15
1 ответ

Думай иначе:

Каждый процесс имеет несколько файловых дескрипторов. Первые три из них, по соглашению, это stdin, stdout и stderr.

Когда вы запускаете процесс, вы можете «указывать» эти дескрипторы в разные места.

Когда вы запускаете оболочку в IDE, IDE указывает на консоль, которую предоставляет IDE.

Когда вы запускаете оболочку в xterm, xterm указывает им на взаимодействие окна/клавиатуры, которое обеспечивает xterm.

Когда вы запускаете оболочку через последовательный порт (, общий для встраиваемых систем ), они указывают на последовательный порт.

Когда вы запускаете оболочку из оболочки и перенаправляете их, вы можете указать им файл.

Таким же образом, когда вы запускаете какой-либо другой процесс (программу )из оболочки, вы можете перенаправить stdin и stdout для этой программы, например.через >и <.

«STDIN относится к приглашению командной строки». без разницы. Вы можете сказать, что сам процесс оболочки имеет эти дескрипторы, они относятся к тому, что было установлено при вызове оболочки, и оболочка может наследовать их другим программам, которые запускаются из оболочки (, или использовать другие для этих ). ].

3
18.03.2021, 23:22

Теги

Похожие вопросы