解释shell脚本代码" for loop"

时间:2015-12-19 19:37:22

标签: linux bash shell loops unix

有人能为我解释这是什么循环?

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

1 个答案:

答案 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")。

相关问题