我写了一个bash脚本,我做了:
num=`wc -l /tmp/file.txt | awk '{sum += $1} END {print sum}'`
#echo $num
#result is for example 29
for i in {1..$num}
do
touch /tmp/pages/$i.txt
done
我想触摸1.txt到29.txt(echo $ num ==> 29)
结果是错误的......
我怎么能像我说的那样写一个正确的循环......?
非常感谢你
答案 0 :(得分:3)
如果您有seq
,可以尝试
for i in $(seq $num)
但不是
num=`wc -l /tmp/file.txt | awk '{sum += $1} END {print sum}'`
你为什么不
num=$(wc -l < /tmp/file.txt)
我猜你不只是触摸循环内的文件
但是,如果这是你想要的,你可以使用awk
awk '{system("touch /tmp/pages/"NR".txt")}' /tmp/file.txt
答案 1 :(得分:2)
问题是大括号扩展(例如{1..3,5}
→1 2 3 5
)在参数扩展之前执行(例如$num
→29
),所以前者不能依赖后者。在您的情况下,一个选项是使用算术(C风格)for
- 循环:
for (( i = 1 ; i <= num ; ++i )) ; do
touch /tmp/pages/$i.txt
done
(如果您习惯于这种for
- 循环风格的语言,这是最吸引人的。如果您更喜欢foreach循环,那么使用外部seq
实用程序,Ray的答案,可能是要走的路。)