我想在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