Я решил его; последний пример должен быть похожим на это:
eval varAlias=\${"myvar"$varname[@]}
for varItem in ${varAlias[@]}
do
echo $varItem
done
Стандартный ввод-вывод и стандартный вывод не являются командами.
Вообразите команды как машины на фабрике со сборочным конвейером. Большинство машин разработано, чтобы иметь один ленточный конвейер для питания данных в и одного ленточного конвейера для питания данных; они - стандартный вход и стандартный вывод соответственно. Стандартная погрешность является открытием на стороне машины, где это может извлечь отклонения.
+-------+ +------------------+ +------------------+ +------+
| input | | machine A | | machine B | |output|
| reser |=====|<stdin stdout>|=======|<stdin stdout>|=====|bucket|
| ‑voir | → | stderr | → | stderr | → | |
+-------+ +------------------+ +------------------+ +------+
|| ||
Схема выше показывает ленточный конвейер, который проходит две машины. Данные прибывают из входного водохранилища слева, питается к машине A, затем вывод передается далее машине B (для которого это вводится), и машина, вывод B депонирован в выходном блоке справа.
В терминах Unix это называют конвейером. Метафора является метафорой инфраструктуры: канал подключает машину к машине B. Синтаксис оболочки для конвейера выше
<input-file.txt commandA | commandB >output-file.txt
<
символ перенаправления говорит оболочке соединяться commandA
стандартный вход в файл input-file.txt
перед запуском commandA
. (Можно поместить перенаправление прежде или после названия команды.) >
символ перенаправления говорит оболочке соединяться commandB
стандартный вывод к output-file.txt
. Канал ("|
"), символ в середине говорит оболочке соединяться commandA
стандартный вывод к commandB
стандартный вход прежде, чем запустить их.
Команды могут иметь больше чем один вход и больше чем один вывод, но это существенно в течение другого дня.
standard input is a command that allows user to write to a file
Не команда, а поток. Стандарт в и похож на почтовые ящики. Когда программа запускается, она дала поле для получения и поле для отправки почты. Обычно, вход прибывает из клавиатуры и и помещается в ящик входящих сообщений, почта, вставленная в ящик исходящих сообщений, заканчивается на Вашем терминальном экране.
standard output is a command that has the bash shell write output to the shell
Программа на самом деле не знает, где стандарт указывает. Когда Вы передаете по каналу к B (как в $ A | B
), когда A помещает почту в ящик исходящих сообщений, это заканчивается в ящике входящих сообщений B. B обрабатывает вход и помещает его собственную почту в ящик исходящих сообщений, который является тем, что Вы видите на терминале.
Для отбрасывания метафоры, как упомянуто, стандарт в / является потоками. Почтовый ящик или дескриптор файла, является одним концом потока. Передавать по каналу означает соединить стандарт из к стандарту в B.