前回、while文を使用して配列変数を作成しようとしました。しかし、実行ファイル ${command} が時間を要するコマンドであった場合、所望の動作をしないことが判明しました。そこで、スマホのアドレス帳編集で使用したような特定の文字列で始まる行で挟まれたカード形式のファイルと見なし、sed と awk で分解する方法に変更しました。
「シェルスクリプト最大の罠」という言葉も有る位 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}