나는 할 수 있기를 원한다 :
declare -A map=(
['A']=1
['B']=2
['C']=3
['D']=4
)
sh script2.sh ???
params = ...
echo ${params['A']}
즉, 키에 의한 접근 매개 변수. 나는 일반 배열에 대한 관련 질문을 보았고 그에 대한 대답은 배열을 다음과 같이 전달하는 것입니다.
sh script2.sh "${AR[@]}"
내가 생각하는 번역 :
sh script2.sh "${map[0]}" "${map[1]}" "${map[2]}"
하지만이를 통해 순서에 따라 요소에 액세스 할 수 있습니다.
내가 원하는 것을 달성하는 영리한 트릭이 있습니까? 아마도 "A=1" "B=2" "C=3" "D=4"
대신 전달되고 script2.sh
구문 분석하는 것이 있습니까? 아니면 더 깔끔한 솔루션이 있습니까?
내부 에서만 호출하는 경우 @ markp-fuso가 지적했듯이 수행해야 할 일은 소스 이며 모든 데이터가 이미로드 된 현재 컨텍스트에서 실행됩니다.script2.sh
script1.sh
script2.sh
정말로 그것이 명령 줄에 있기를 원한다면, 그것을 전달하고 key=val
코드에서 script2.sh
그 형식에 대한 각 인수를 확인하고 연관 배열에 설정하십시오.
declare -A map=()
for arg in "$@"
do if [[ "$arg" =~ ^[A-Z]=[0-9]$ ]] # more complex k/v will get ugly
then map[${arg/=?}]=${arg/?=} # as will the assignment w/o eval
fi
done
# And finally, just to see what got loaded -
declare -p map
$: script2.sh C=3 A=1
declare -A map=([A]="1" [C]="3" )
위에서 언급했듯이 더 복잡한 가능한 키 이름 및 / 또는 값 집합에는 할당 논리뿐만 아니라 적절하게 더 복잡한 테스트가 필요합니다. 분명히 가장 단순한 경우를 제외하고는 이것은 금방 문제가 될 것입니다.
더 나은 방법은 전체 getopts
루프를 설정하고 적절한 인디케이터로 인수를 전달하는 것입니다. 이것은 더 많은 디자인과 더 많은 구현이 필요하지만 더 많은 기능을 얻기 위해 필요한 것입니다.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다