リストファイルから配列の作成(訂正)

前回、while文を使用して配列変数を作成しようとしました。しかし、実行ファイル ${command} が時間を要するコマンドであった場合、所望の動作をしないことが判明しました。そこで、スマホのアドレス帳編集で使用したような特定の文字列で始まる行で挟まれたカード形式のファイルと見なし、sedawk で分解する方法に変更しました。

シェルスクリプト最大の罠」という言葉も有る位 while文を使いこなすのは難しいようです。

#/bin/bash
sdoc=\
" list2id_array.sh \n"\
" 標準入力から ID列を読み取り、id_a配列に満たします \n"\
" 加えてcommandを呼び出し実行します  \n\n"\
" [option] \n"\
"  command=  実行させるコマンド \n"\
"\n\n\n"

export sdoc
command=`getparstr $# "$*" "command"`
if [ -z "$command" ]
then
 usage;exit
fi

temp=`mktemp ./XXX`
while read line
do
 echo "${line}" >> ${temp}
done
declare -a begin_a=(`\
 grep -n "OUTPUT" ${temp} |\
 awk -F":" '{print $1}' \
`)
declare -a end_a=(`\
 grep -n "END" ${temp} |\
 awk -F":" '{print $1}' \
`)

for (( seq=1; seq<=${#end_a[@]}; seq++ ))
do
 seq1=`expr $seq - 1`
 BEGIN=${begin_a[${seq1}]}
 END=${end_a[${seq1}]}
 output=`cat ${temp} | sed -n ${BEGIN}'p' | awk '{print $2}'`
 declare -a id_a=(`\
  cat ${temp} |\
  sed -n ${BEGIN},$(( ${END} - 1 ))'p' |\
  awk '1< NR {print $2}'\
 `)
 . ${command}
done

rm ${temp}

f:id:S_E_Hyphen:20210502164027p:plain