有人能为我解释这是什么循环?
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
答案 0 :(得分:1)
在这个循环中是糟糕的写shell代码(性能,奇怪的文件名之后的错误) 外循环:
for file in `ls *SC*`; do
done > text1
尝试查找名称中包含SC的所有文件,对其执行某些操作,并将输出写入text1。更好的是:for file in *SC*; do
内环:
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"
)。