우선 제목이 아쉽네요. 제 포부를 어떻게 말로 표현해야 할지 모르겠습니다. 그러나 코딩/스크립팅 관점에서는 매우 기본적이어야 합니다. 그러나 나는 어떻게 든 그것을 구현하지 못했습니다 :/
프롬프트나 명령줄 인수를 통해 사용자 입력을 기다리는 bash 스크립트가 있습니다. 허용되는 답변이 몇 개뿐이므로 배열과 비교하여 확인합니다. 이제 우리는 그것을 "패키지"라고 부릅니다. 허용되는 각 답변은 다른 항목에 대한 간단하고 사람이 읽을 수 있는 별칭과 같습니다. 이는 배열의 두 번째 줄에 선언됩니다.
declare -a packs=('low', 'mid', 'high')
declare -a packcontent=('1+1+2', '2+2+3', '3+3+4')
parameters=${packcontent[xxx]}
내가 실패한 곳은 첫 번째 배열을 두 번째 배열로 구문 분석하는 것입니다. 사용자 입력 색인을 변수에 전달할 수 있도록 어떻게 얻나요?
예: 사용자가 "낮음"이라고 말하면 "낮음"이 첫 번째 배열의 첫 번째(0번째) 요소라는 것을 알아야 합니다. 따라서 두 번째 배열의 첫 번째(0번째) 요소에 "매개변수"를 할당해야 합니다.
parameters=1+1+2
중간 단계가 누락되었거나 bash가 이를 대체할 수 없는지 확실하지 않지만 이를 달성하는 방법을 모르겠습니다.
문제에 대한 내 설명이 그렇게 혼란스럽지 않았기를 바랍니다.
감사합니다!
답변1
이것은 bash 연관 배열 작업처럼 보입니다!
문자열로 인덱싱된 배열을 만들 수 있습니다. 다른 언어에서는 "해시" 또는 "맵"으로 알 수 있습니다. 다음을 고려하세요:
$ declare -A packs
$ packs=( [low]='1+1+2' [mid]='2+2+3' [high]='3+3+4' )
$ parameters=${packs[low]}
$ echo $parameters
1+1+2
답변2
드래곤의 대답최신 버전을 사용하면 모든 것이 괜찮지 bash
만 4.0 이전 버전(예: macOS)의 경우 일반 배열을 사용해야 합니다.
다음을 수행할 수 있습니다.
packcontent=('1+1+2' '2+2+3' '3+3+4')
low=0 mid=1 high=2
parameters=${packcontent[mid]}
의 값 은 의 인덱스 1에 있는 값이기 때문 $parameters
입니다 . 배열 인덱스는 산술적 맥락에서 계산되므로 (" ") 접두사를 붙일 필요가 없습니다 .2+2+3
packcontent
mid
$
$mid
(배열 없음) 의 경우 /bin/sh
탈출할 수 있습니다.
set -- '1+1+2' '2+2+3' '3+3+4'
low=1 mid=2 high=3
eval "parameters=\$$mid"
즉, 가능한 인수 목록이 에 보관되고 올바른 인수는 에 할당될 때 하나 또는 올바른 인수 "$@"
의 도움으로 참조됩니다 . 할당을 수행하면 평가할 문자열을 가져와 (이 경우) 값으로 바꿉니다.$low
$mid
$high
parameters
eval
parameters=$n
n
$mid