在 for 循环中使用多个变量

在 for 循环中使用多个变量

我想在for这样的循环中使用两个变量(例如,我不会执行seq类似的操作)

for i j `seq 1 2` 'www.google.com www.yahoo.com';do echo $i $j;done

预期输出为

1 www.google.com

2 www.yahoo.com

答案1

如果只是一个随着每个字符串递增的数字,你可以尝试为了循环并递增每次迭代。

例如:

i=1; for j in 'www.google.com' 'www.yahoo.com'; do echo "$((i++)) $j"; done

答案2

让我们创建变量来指向文件位置

FILE="/home/user/myfile"

文件内容:

www.google.com 
www.yahoo.com

获取输出:

1 www.google.com
2 www.yahoo.com

可以通过以下方法之一来完成:


使用计数器变量:

i=1; 
cat $FILE | while read line; do 
    echo "$((i++)) $line"; 
done

使用cat -n(编号所有输出行)

cat -n $FILE | while read line; do 
    echo "$line"; 
done

使用数组:

array=(www.google.com www.yahoo.com);
for i in "${!array[@]}"; do 
    echo "$((i+1)) ${array[$i]}"; 
done

如果你的文件已经有行号,例如:

1 www.google.com
2 www.yahoo.com

循环并将每一行拆分到数组:

cat $FILE | while read line; do
    col=( $line ); 
    echo "${col[0]} ${col[1]}"; 
done

更多信息:

答案3

以下是一些替代方法,其中两种简短而简单:

 printf "%s\n" www.google.com www.yahoo.com | cat -n  

 for i in www.google.com www.yahoo.com; do echo $i; done | cat -n

两个输出:

 1  www.google.com
 2  www.yahoo.com

稍微复杂一点的:

s=(www.google.com www.yahoo.com)
for i in $(seq 1 ${#s[@]}); do
        echo $i ${s[i-1]}
done

输出:

1 www.google.com
2 www.yahoo.com

在第二个建议中,我使用名为 created 的数组,s其中包含以下行s=(xx yy)

语法${#s[@]}是数组中元素的数量,这里2和是距数组开头${s[i-1]}偏移量的元素,因此是然后是,等等。 i-1${s[1-1]}${s[0]}www.google.com


相关内容