有人能给我解释一下这个循环是什么吗?
for file in `ls *SC*`; do
for content in `cat $file `; do
scid=`echo $file|awk -F'.' '{print $1}'`
printf "%-10s%s\n" $scid $content
done
done > text1
最佳答案
在此循环中,编写的 shell 代码很糟糕(性能、奇怪文件名后的错误)。
外循环:
for file in `ls *SC*`; do
done > text1
尝试查找名称中包含 SC 的所有文件,对其执行某些操作,并将输出写入 text1。更好的是:for file in *SC*;做
内循环:
for content in `cat $file `; do
done
对文件中的每个单词执行一些操作。
scid=`echo $file|awk -F'.' '{print $1}'`
该行属于内循环之外。它从第一个点开始截断(删除文件名中带 1 个点的扩展名)。您可以使用cut
或更快的${file%.*}
。
printf "%-10s%s\n" $scid $content
打印截止文件名(最少 10 个位置:附加空格)和第一个单词,当 scid 或内容包含特殊字符时,两者都可能失败(更好的 printf "%-10s%s\n""$scid""$content"
)。
关于linux - 解释 shell 脚本代码 "for loop",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34374596/