1
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 做到这一点?

4

3 回答 3

1

您可以使用(())

$((i + 1))

所以特别

ADDRESS=$(head -$((i + 1)) "$project_name/address" | tail -1 | cut -f2)

这不会改变i(可以通过 实现$((i++)))的当前值

于 2012-05-11T07:31:13.017 回答
1

我赞同 Dennis Williamson 在他的评论中所写的内容,但即使代码主体没有什么用处,我还是想展示一种不同的、更有效的方式。您已经熟悉了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
于 2012-05-15T10:20:46.843 回答
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
于 2012-05-11T07:21:25.750 回答