다음 스크립트(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

관련 정보