for i in $(seq 1 100)
do
ADDRESS=$(head -$i "$project_name/address" | tail -1 | cut -f2)
sed -i.old "20s/.\{60\}/&${ADDRESS}/" "Desktop/lscript.ld"
done
我根据这个使用此代码:
if [[ i = 1 ]]
then
ADDRESS=$(head -1 "$project_name/address" | tail -1 | cut -f2)
fi
将被执行,但我希望每次head
值增加1。
当i=1
我希望head -2
执行时,i=2
我想要head -3
。我怎么能用Bash做到这一点?
答案 0 :(得分:1)
怎么样:
for i in $(seq 1 100)
do
ADDRESS=$(head -n $((i + 1)) "$project_name/address" | tail -1 | cut -f2)
sed -i.old "20s/.\{60\}/&${ADDRESS}/" "Desktop/lscript.ld"
done
答案 1 :(得分:1)
您可以使用(())
$((i + 1))
特别是
ADDRESS=$(head -$((i + 1)) "$project_name/address" | tail -1 | cut -f2)
这不会改变i
的当前值(可以通过$((i++))
实现)
答案 2 :(得分:1)
我正在谈论丹尼斯·威廉姆森在评论中所写的内容,但即使代码的主体没有什么用处,我也希望展示一种不同的,更有效的方式。您已熟悉sed
所需的所有功能,以便使ADDRESS分配更加清晰:
ADDRESS=$(sed -n "$i"'s/.*\t\([^\t]*\)\t.*/\1/p' "$project_name/address")
您还可以使用nl
来驱动循环以获取行号:
head -n 100 "$project_name/address" |
cut -f2 |
nl |
while read i address; do
... do something with $i and $address ...
done