2015-01-07 3 views
1

/배열에 넣어 :배쉬 : 여러 선택은 하나 개의 변수 나는이 시나리오에 대한 코드를 알아 내려고 노력하고 있어요

Mix your favourite fruit: 
1 Apples 
2 Pears 
3 Plums 
4 Peach 
5 Pineapple 
6 Strawberry 
7 All 
8 None 

Selection:146 

Your cocktail will contain: Apples Peach Strawberry 

한 번에 하나의 작업을 수행 할 수 있습니다 내 제한된 지식 :

echo "Mix your favourite fruit: 
1 Apples 
2 Pears 
3 Plums 
4 Peach 
5 Pineapple 
6 Strawberry 
7 All 
8 None" 

echo Selection: 
read selection 

case $selection in 
1) 
mix=Apples 
;; 
2) 
mix=Pears 
;; 
.. 
.. 
12) 
mix="Aples Pears" 
;; 
7) 
mix=123456(this is wrong) 
;; 
8) 
mix=no fruits 
;; 
esac 

echo Your cocktail will contain: $mix 

내 생각 배열에 입력 된 각 숫자를 추가 할 수 있습니까? 그렇다면 아마도 esac 루프가 최선의 해결책이 될 수 없을 것입니다.

+0

거기에 8 가지 옵션이 있으면 8을 작성해야합니다. = 가능한 모든 입력을 처리하기 위해 40,320 개의 'if'사례. 좋은 결과 내길 바랄 게. 146자를 개별 자릿수로 분류하고 그 자만을 확인하는 법을 배우는 것이 더 낫습니다. 코드를 split operation + loop로 줄이고,'if' 테스트를 8 번 수행합니다. –

+0

그럼 그 코드를 거기에 넣으십시오. 그래서 저는 아무 것도 솔루션을 요구하지 않습니다. 그리고 또한 내 코드를 수정하여 같은 결과를주는 유사 응답을 사용할 수있는 간단한 솔루션을 얻을 수 있기를 바랍니다. 451. 그래서 수의 해부가 필요하지만 그것에 접근하는 방법을 모른다. – Viktor

답변

3

과일을 배열에 저장하고 [[과 함께 == 연산자를 사용하여 와일드 카드 일치를 확인할 수 있습니다.

mix=() 

[[ $selection == *[17]* ]] && mix+=(Apples) 
[[ $selection == *[27]* ]] && mix+=(Pears) 
[[ $selection == *[37]* ]] && mix+=(Plums) 
... 

echo "Your cocktail will contain: ${mix[@]:-no fruits}" 

$selection가 포함되어있는 경우 1 또는 7, 배열에 "Apples"를 추가합니다. 2 또는 7이 포함 된 경우 "Pears"을 추가하십시오. 등등.

부분은 배열이 비어 있으면 "no fruits" 문자열로 대체합니다.

+0

그것은 내가 바라는 바른 해결책입니다! 완벽하게 작동합니다! – Viktor