-4

任何人都可以解释使用的部分read i。哪里i来的。

scp -i ~/.ssh/id_rsa.sample gaara@stuid.student.com:ready/$2/*.zip ./$2 > slate.out 2>&1

ls -1 $2/* > curr.lst 2>/dev/null

while
read i
do
  if
    test -e ../done/"$i"
  then
      diff "$i" ../done/"$i" >/dev/null 2>&1
    if
      test $? -eq 0
    then
      rm "$i"
    fi
  fi
done < curr.lst
4

2 回答 2

4

此语法read通常用于处理文件中的多行。让我们通过省略内部循环来简化事情:

while
read i
do
  # Process i
done < curr.lst

'while x do; done' 语法非常基本且易于理解,但添加 I/O 重定向可能会造成混淆。当你添加< curr.lstafterdone时,它的意思是“使用这个文件的内容作为stdin条件。所以,如果你现在省略循环,你会得到:

read i < curr.lst

现在很清楚,从每一行的内容中read获取输入curr.lst并将变量设置为。i因此,该代码块的基本含义是“将每一行curr.lst作为变量i处理,其中包含循环内的代码。

于 2013-10-21T14:56:33.680 回答
3

"read" 根据手册页(man page在 shell 中键入),从文件描述符中读取。

在您的代码中,循环是为“curr.lst”中的每一行创建的,它们被放入变量中$i

于 2013-10-21T14:49:13.973 回答