Как перебрать две переменные в сценарии sh?

Использование ядра 2.6.x

Как бы вы скриптили результат ниже со следующими переменными, используя sh (not bash, zsh и т. Д.)?

VAR1="abc def ghi" VAR2="1 2 3" CONFIG="$1" for i in $VAR1; do for j in $VAR2; do [ "$i" -eq "$j" ] && continue done command $VAR1 $VAR2 done 

Желаемый результат:

 command abc 1 command def 2 command ghi 3 

Один из способов сделать это:

 #! /bin/sh VAR1="abc def ghi" VAR2="1 2 3" fun() { set $VAR2 for i in $VAR1; do echo command "$i" "$1" shift done } fun 

Вывод:

 command abc 1 command def 2 command ghi 3 

Вариант ответа Сатц Кацуры (здесь, автономная функция):

 func () { var=$1 set -- $2 for arg1 in $var; do printf 'command %s %s\n' "$arg1" "$1" # or cmd "$arg1" "$1" directly shift done } func "abc def ghi" "1 2 3" 

Следующие будут работать, но будут перезаписывать позиционные параметры скрипта, в котором он находится:

 var1="abc def ghi" var2="1 2 3" set -- $var2 for arg1 in $var1; do printf 'command %s %s\n' "$arg1" "$1" shift done 

Следующее – одно из решений.

 #!/bin/sh var1="abc" var2="1 2 3" set -- $var2 for i in $var1 do echo $i $1 shift done