请详细说明以下脚本(5,7行)

请详细说明以下脚本(5,7行)
#!/bin/bash    
# Declare array  
declare -a ARRAY  
# Link filedescriptor 10 with stdin  
exec 10<&0   
# stdin replaced with a file supplied as a first argument   
exec < $1   
let count=0    

while read LINE; do     
    ARRAY[$count]=$LINE  
    ((count++))  
done  

echo Number of elements: ${#ARRAY[@]}  
# echo array's content   
echo ${ARRAY[@]}   
# restore stdin from filedescriptor 10   
# and close filedescriptor 10   
exec 0<&10 10<&-  

第 5 ( exec 10<&0) 行和第 7 ( exec < $1) 行有何作用?

答案1

第 4 行和第 6 行的注释说明了一切。标准输入(任意)分配给文件描述符 10,然后将名称作为第一个参数给出的文件的内容分配给 stdin。

在文件末尾,此操作被撤消。

脚本开发人员可能认为这会阻止调用以下形式:

 echo -e '5\n6' | yourscript

(不带参数)会阻止脚本从标准输入读取,但事实并非如此(即输出为:

yourscript: line 7: $1: ambiguous redirect
Number of elements: 2
5 6

相关内容