• 締切済み

bash Linux CentOS

bash Linux CentOS 標準入力から入力された文字列を配列に格納する。 「quit」が入力された場合は、これまで配列に格納した内容を全て表示して、処理を終了する。 1。 以下の処理を繰り返す 2.入力 3.入力は「QUIT」ならば6へ飛ぶ 4.入力データを配列に格納する 5。1へ戻る 6.配列に格納されたデータを表示する といったものを作りたいのですがうまく格納できなくて… 皆さんのお力を貸してください><;

みんなの回答

回答No.4

★No.2 改良(?)版 ------ IFS=$'\n' eval 'x=($(sed /^QUIT$/Q))' echo ${x[@]} ------ * No.2 だと、キーボードから入力する場合に、QUIT を入力した後に C-d (EOF) などを押してストリームの末端である事を知らせないとなりません。代わりに、"Q" にしてその場で即終了する様にしました。 * あと /QUIT/ だと、部分文字列として含まれている場合(例: DO_NOT_QUIT)にも終了してしまうので、/^QUIT$/ にしました。 * 後、行の中に空白があっても分割されたくない様に IFS=$'\n' を指定しています。 ★配列 x の中身を、空白区切ではなく改行区切で出力したい場合は、例えば、 ------ IFS=$'\n' eval 'echo "${x[*]}"' ------ で。 ★bash の組み込み機能だけで実現したい場合は No.1 で良いかと思います。

  • Wr5
  • ベストアンサー率53% (2173/4061)
回答No.3

とりあず。bash の仕様を調べて作ってみました。 #!/bin/bash ARRAY1=() while : do read in if [ $in = 'QUIT' ]; then break fi ARRAY1=("${ARRAY1[@]}" $in) done for (( i = 0; i < ${#ARRAY1[@]}; i++ )) do echo ${ARRAY1[$i]} done

参考URL:
http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q11134323636
  • kmee
  • ベストアンサー率55% (1857/3366)
回答No.2

具体的に、どこがどうわからないのでしょう? 配列の使いかた、ループの作り方、みんなマニュアルに載っています。 ある程度作ったのなら、それを掲載して、他の人に見てもらうのもよいでしょう # 配列の宣言 declare -a x # 配列に入力 x=($(sed '/QUIT/,$d')) # 全部出力 echo ${x[@]}

  • notnot
  • ベストアンサー率47% (4901/10362)
回答No.1

while read a && test "$a" != QUIT do x=("${x[@]}" "$a") done for((i=0;i<${#x[@]};i++)) do echo "$i : ${x[$i]}" done 表示は、単に表示するだけなら、 echo ${x[@]} でもいいです。

関連するQ&A