次のスクリプト(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

関連情報