모든 사람--
여기 좀 막혔어요. 더 큰 스크립트로 병합될 작은 스크립트가 있습니다. 이 작은 조각은 사용자 입력을 수락하고 이를 저장된 변수 목록과 비교해야 합니다. 사용자 입력이 나열된 변수 중 하나와 일치하면 해당 변수에 대한 문자열을 출력해야 하며, 어떤 요소와도 일치하지 않으면 사용자 입력을 새 변수에 써야 합니다.
문맥상 제가 한 일은 일부 변수를 문자열(이 경우 교과서의 인용 정보)로 정의하는 것이었습니다. 예를 들어:
books=()
buffa7="Wilson, Buffa, Lou. Physics. Pearson, 7th edition, 2009. ISBN: 0321601831"
books=+("$buffa7")
giancoli6="Giancoli, Douglas C. Physics: Principles with Applications. Prentice Hall, 6th edition. ISBN: 0321736990"
books=+("$giancoli6")
이 코드에 대한 나의 이해는 배열을 생성 books
하고 변수를 가져와 $buffa7
목록 $giancoli6
에 추가한다는 것입니다. 내가 원하는 것은 사용자에게 소스에 대한 입력을 요청하는 것입니다. 사용자가 buffa7
또는 를 입력하면 해당 변수에 할당된 텍스트로 giancoli6
변수가 재정의되어야 합니다 . $source
사용자 입력이 이와 일치하지 않으면 변수는 $source
사용자가 입력한 대로 정의되어야 합니다.
내가 겪고 있는 것 같은 문제 는 사용자가 소스 정보를 입력할 때 yes를 buffa7
사용하는 경우입니다 . 진행 방법에 대한 제안 사항이 있으면 크게 감사하겠습니다!buffa7
buffa7
$buffa7
답변1
이는 이름 참조나 변수 간접 지정을 사용하여 수행할 수 있지만 수행해야 할 작업은 연관 배열을 사용하는 것입니다. 연관 배열이 전체 항목을 처리할 수 있으면 각 항목에 대해 변수를 사용할 필요가 없습니다.
declare -A books
books[buffa7]="Wilson, Buffa, Lou. Physics. Pearson, 7th edition, 2009. ISBN: 0321601831"
books[giancoli6]="Giancoli, Douglas C. Physics: Principles with Applications. Prentice Hall, 6th edition. ISBN: 0321736990"
그 다음에:
read input
source=${books[$input]} # set $source to entry from array
if [[ -z $source ]] # if $source is empty after that
then # $input was not in array, so
source=$input # set $source to $input.
fi