如何在 sh 脚本中迭代两个变量?

如何在 sh 脚本中迭代两个变量?

使用内核 2.6.x

如何使用 sh (不是 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

答案1

一种方法是:

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

答案2

一个变体佐藤桂的回答(这里是一个独立的函数):

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

答案3

以下是解决方案之一。

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

相关内容