0

次のスクリプトを使用して、ターミナルからテキスト ファイルに行を複数回送信しようとしています。最初の行とその説明を 2 行目に記述した後、スクリプトはユーザーに別の行を入力するかどうかを尋ねます。はいの場合、ユーザーは 3 行目、4 行目などを書き込みます...

私の問題は、2 行目以降、つまり 3 行目以降で、スクリプトが完全な文ではなく最初の単語だけを書き込むことです。これを解決するにはどうすればよいですか?

function ml() {
  echo $@ >> $HOME/path/to/file/filename
  echo -n "Enter description and press [ENTER]: "
  read description
  echo -e '\n[\t]' $description >> $HOME/path/to/file/myfile
  while true
  do
     read -p "Add another line?y?n" -n 1 -r
     echo -e "\n"
     if [[ $REPLY =~ ^[Yy]$ ]]
     then
         echo -n "Enter another line and press [ENTER]: "
         read -a meaning 
         echo -e "[\t]" $meaning >> $HOME/path/to/file/myfile
     else
         break
     fi
  done
  echo % >> $HOME/path/to/file/myfile
}

また、コードに別の変更を加えたいと思います

read -p "Add another line?y?n" -n 1 -r

y/n 入力を求める代わりに、最初の 2 行を挿入した後、ENTER を押すたびに別の行入力を求め、ESCAPE を押すとスクリプトが終了するようにすることはできますか?

4

1 に答える 1

1

これは、 への 2 回目の呼び出しで、次の引数をread使用しているためです。-a

単語は、0 から始まる配列変数 aname の連続インデックスに割り当てられます。 aname は、新しい値が割り当てられる前に設定解除されます。他の名前引数は無視されます。

それはあなたが望むものではないようです。

于 2013-07-04T04:35:26.083 に答える