Я реализую как код ниже, используя для цикла, но неправильный вывод после запуска сценария.
for i in `awk -F"|" '{print $1}' $INPUTFILE`, j in `awk -F"|" '{print $2}' $INPUTFILE`
do
echo $i:$j
done
Пожалуйста, помогите мне использовать несколько переменных в одном цикле for в скрипте оболочки.
shell-script
for
user3548033
источник
источник
Ответы:
bash допускает циклы с более чем одной переменной, но только в C, как синтаксис:
источник
Может быть, вы действительно хотите:
Но использование цикла оболочки для обработки текста часто является неправильным способом .
Здесь звучит так, будто вам просто нужно:
Теперь, как ответ на вопрос в заголовке, для оболочки с
for
циклами, принимающими более одной переменной, вы получилиzsh
(кажется, что вы уже используете синтаксис zsh, не заключая в кавычки свои переменные или не отключая глобализацию при разбиении подстановки команд):Или более короткая форма:
Эквивалент с оболочками POSIX:
источник
<&3
) и что-
после этого делать? Просить из любопытства.printf
только 1 и, возможно, 2 для ошибок).3<&-
это синтаксис для закрытия FD. Мы закрываем 3 для команд внутри цикла, поскольку они не нуждаются в доступе (и не должны использовать) к этому ресурсу.Вам понадобится несколько циклов, если вы хотите перебрать более одной переменной, например
for i in 1 2 3; do for j in a b c; do ...; done; done
. когда список вещей для перебора является выходом другой команды, вам нужно обернуть эту другую команду$()
.источник
Вы можете сохранить вывод файла в переменной, а затем разбить его на две части. пример:
в примере содержимое файла:
сейчас скрипт.
источник
На встраиваемых системах вы часто наносите ущерб тому, что доступно. НАПРИМЕР.
for
может иметь только одну переменную;awk
&printf
просто не доступны; илиIFS
не поддерживается; и т.п.В этих условиях вы можете достичь своей цели следующим образом:
Более общая форма этого решения может выглядеть так:
export C=$i
прямо перед тем,echo
если это поможет.источник
GNU Parallel часто может быть решением для этого:
источник