0

パス内のディレクトリを読み取り、ユーザーに魔女ディレクトリの選択を求めるスクリプトを作成しています。これまでのスクリプトは次のようになります。

select choises in ${list_files[@]}; do
  if CONTAINS_ELEMENT $choises "${list_files[@]}"; then
    break
  else
    echo "invalid choise (PS use the ID numbers)! Try again:"
  fi
done

「CONTAINS_ELEMENT」は、変数 $choises が list_files 配列のメンバーであるかどうかをチェックする関数です。このスクリプトは問題なく動作し、出力は次のようになります。

1) first_folder 
2) second_folder
3) yet_another_folder

また、ユーザーは、対応する ID 値 (つまり、「second_folder」の場合は「2」) を入力して、witch フォルダーを選択できます。

私が苦労しているのはこれです:提供された回答が正しい番号または正しいファイル名であるかどうかを確認する方法はありますか? また、ファイル名を手動で書き込める場合、このスクリプトで名前補完を実装する方法はありますか?

select への実際の返信は変数 $REPLY に保持されているため、$choises と $REPLY の両方をチェックする必要があります。完了メカニズムは、私が推測するよりもはるかにトリッキーです..

ここで良い提案はありますか?これらの機能を利用するのを手伝ってくれたら、とてもクールです!!

4

1 に答える 1

0
select choises in ${list_files[@]}; do
  if CONTAINS_ELEMENT $choises "${list_files[@]}" || CONTAINS_ELEMENT $REPLY "${list_files[@]}"; then 
    break
  else
  echo "invalid choise (PS use the ID numbers)! Try again:"
  fi
done

これにより、ID 番号と完全なディレクトリ名の両方が機能しますが、コードは少し見苦しく、名前の補完はありません。

于 2013-08-30T10:34:46.833 に答える