![如何在 sh 脚本中迭代两个变量?](https://linux22.com/image/117385/%E5%A6%82%E4%BD%95%E5%9C%A8%20sh%20%E8%84%9A%E6%9C%AC%E4%B8%AD%E8%BF%AD%E4%BB%A3%E4%B8%A4%E4%B8%AA%E5%8F%98%E9%87%8F%EF%BC%9F.png)
使用内核 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