質問: TARGET_MSG_ID="" while read line do TARGET_MSG_ID="$TARGET_MSG_ID${line}," done < msg_id.txt ==================
回答: readline は「今が最終行である」ことを検知できません。検知できるのは「もう取る行がない」だけです。 ですから最終行を判定するようなことをしようとしてはいけません。 , がついてほしくないならば、逆に考えて * 最初に読み込んだ行ならばそのまま * それ以外なら、',' を付けてから読み込んだ内容を付け加える でもいいのです。 なのでこういう手が使えます。 ``` TARGET_MSG_ID="" SEPARATOR="" while read line do TARGET_MSG_ID="${TARGET_MSG_ID}${SEPARATOR}${line}" if [ "${SEPARATOR}" = "" ] SEPARATOR="," fi done ``` 最初の行のときは SEPARATOR が "" ですから、何もつきません。 その直後の if 文で SEPARATOR が "," に変更されるので、2行目では [1行目の内容],${line} とくっつくようになります。