は、以下のbashコード検討連想配列のキーに対する文字列を比較する:バッシュ -
echo -e "\nThe following versions are available for install:"
declare -A VERS
CNT=0
for FILE in `ls ${ASSET_DIR}/enterprise`; do
let "CNT++"
VERS_STR=`sed -e 's/^file-\([0-9].[0-9].[0-9]\).zip/\1/' <<< ${FILE}`
VERS[${CNT}]=${VER_STR}
done
for i in ${!VERS[@]}; do
echo " ${i} - ${VERS[${i}]}"
done
echo -n "Which version do you want to install?: "
read VERS_INPUT
$VERS_INPUT
は、連想配列$VERS
のキーのいずれかに等しくなければなりません。 $VERS_INPUT
の値が$VERS
のいずれかのキーと等しいことを確認するにはどうすればよいですか。現在の設定では、現在の設定では、forループから生成される6つのオプションがありますが、これは成長する可能性があります。したがって、静的なチェックを行い、毎回スクリプトを変更する必要はありません追加のファイルを入れる時間は${ASSET_DIR}/enterprise
です。 if文が順番に並んでいると推測しますが、連想配列のキーとどのように一致するかを確認する方法はわかりません。
EDIT:
$ echo $ENV["1"]
3.4.3
$ echo $ENV["2"]
3.4.4
$ echo $ENV["3"]
3.4.5
$ echo $ENV["4"]
3.4.6
ユーザが入力するように促される。
例を与えるために、ループの最初の動的四つの値を有する連想配列$VERS
を生成言うことができます(変数$VERS_INPUT
に割り当てられている)値が1,2,3、または4になるようにしてください。$VERS_INPUT
の値が1,2,3、または4のいずれかであることを確認するにはどうすればいいですか?任意の例です。私のリストは現在6つのオプションがあり、今後さらに成長する予定です。 1、2、3、4などが最初のforループから動的に生成され、手動で生成されないので、これを可能な限り動的にしたいと考えています。
'ls'の出力を解析できない場合は、解析しないでください。空白は私たちの敵です。ファイル名の空白は大規模な敵です。 '$ {ASSET_DIR}/enterprise/*のFILEのための';それはすべきだ。隠しファイルに注意してください。 –