Rajib Asked: 2021-09-17 10:02:19 +0800 CST2021-09-17 10:02:19 +0800 CST 2021-09-17 10:02:19 +0800 CST 既然 read 有一个内置变量 $REPLY,为什么我们需要显式声明 $line 或其他变量 772 在逐行读取并且 IFS 设置为 null 时,我们可以编写: while IFS= read -r line do echo "$line" done < <(find . -name "*.txt") 这是否与以下内容不同: while read -r do echo "$REPLY" done < <(find . -name "*.txt") 为什么或何时优先于另一个? bash read 2 个回答 Voted ilkkachu 2021-09-17T10:40:52+08:002021-09-17T10:40:52+08:00 为什么要使用一个名为的变量line,而不是默认值REPLY? 如果变量的命名方式能够描述代码正在做什么,它有助于理解代码。相比: files=( ... ) target=... for file in "${files[@]}"; do something "$file" "$target" done 对比 a=( ... ) b=... for c in "${a[@]}"; do something "$b" "$c" done 哪个更清楚?如果其中有一个错误,哪一个更容易找到它? Best Answer αғsнιη 2021-09-17T10:24:15+08:002021-09-17T10:24:15+08:00 从 中man bash,If no names are supplied, the line read is assigned to the variable REPLY.在您的第二次尝试中没有名称,因此默认情况下它存储在 REPLY 变量中。 例子: $ cat infile 1 2 3 $ while read ; do echo $REPLY; done <infile 1 2 3 但是REPLY当您指定名称时它(变量)没有设置,并且在这种情况下当前行读入指定的名称。 $ while read tmp; do echo $REPLY; done <infile $ 为什么或何时优先于另一个? 很清楚,由您决定,当您想使用默认 REPLY 变量来存储它读取的行时,删除name参数,以存储不同的变量名称,严格指定它,仅此而已。
为什么要使用一个名为的变量
line
,而不是默认值REPLY
?如果变量的命名方式能够描述代码正在做什么,它有助于理解代码。相比:
对比
哪个更清楚?如果其中有一个错误,哪一个更容易找到它?
从 中
man bash
,If no names are supplied, the line read is assigned to the variable REPLY.
在您的第二次尝试中没有名称,因此默认情况下它存储在 REPLY 变量中。例子:
但是
REPLY
当您指定名称时它(变量)没有设置,并且在这种情况下当前行读入指定的名称。很清楚,由您决定,当您想使用默认 REPLY 变量来存储它读取的行时,删除name参数,以存储不同的变量名称,严格指定它,仅此而已。