Como iterar duas variáveis em um script sh?

2

Usando o kernel 2.6.x

Como você registraria o resultado abaixo com as seguintes variáveis usando sh (não bash, zsh, etc.)?

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

Resultado desejado:

command abc 1
command def 2
command ghi 3
    
por uihdff 04.09.2017 / 18:06

3 respostas

6

Uma maneira de fazer isso:

#! /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

Saída:

command abc 1
command def 2
command ghi 3
    
por 04.09.2017 / 18:20
5

Uma variação da resposta de Satō Katsura (aqui, uma função autônoma):

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"

O seguinte funcionaria, mas substituiria os parâmetros posicionais do script em que está:

var1="abc def ghi"
var2="1 2 3"

set -- $var2
for arg1 in $var1; do
    printf 'command %s %s\n' "$arg1" "$1"
    shift
done
    
por 04.09.2017 / 18:29
1

A seguir, uma das soluções.

#!/bin/sh
var1="a b c"
var2="1 2 3"
set -- $var2
for i in $var1
do
    echo $i $1
    shift
done
    
por 04.09.2017 / 18:40