여기에 내 현재 프로세스의 :설정 기본값
이var[product]=messaging_app
var[component]=sms
var[version]=1.0.7
var[yum_location]=$product/$component/$deliverable_name
var[deliverable_name]=$product-$component-$version
# iterate on associative array indices
for default_var in "${!var[@]}" ; do
# skip variables that have been previously declared
if [[ -z ${!default_var} ]] ; then
# export each index as a variable, setting value to the value for that index in the array
export "$default_var=${var[$default_var]}"
fi
done
내가 찾고 핵심 기능은 이전에 선언 덮어 쓰지 않습니다 기본 변수의 목록을 설정하는 것입니다 변수.
위의 코드는 그렇게하지만이 변수의 문제가 이제는 서로 의존 할 수 없게 만들었습니다. "${!var[@]}"
에서 연관 배열의 인덱스 출력의 순서는 항상 그들이 선언 된 순서와 동일하지 않기 때문입니다
같이 존재 간단한 해결책 않습니다.
declare --nooverwrite this=that
내가 할 수 없었다을 그와 비슷한 것을 찾아야합니다.
또한 if 문을 사용하여이 작업을 수행 할 수 있음을 알고 있습니다. 그러나 많은 if 문을 사용하면 거의 100 개의 기본 변수가있는 스크립트의 가독성이 떨어집니다. 3.5.3 Shell Parameter Expansion에서