스크립트는 사용자 입력에 따라 배열에 저장된 다양한 값을 에코합니다. 그러나 출력이 잘못되어 잘못된 값이 에코됩니다.
AA_P=/root/run_Scripts/AA_P_run.sh
AA_S=/root/run_Scripts/AA_S_run.sh
read -p "Enter 'P' or 'S'"$'\n' P_S
read -p "How many runs?"$'\n' runs
script="AA${P_S}"
echo $script
echo ""
declare -A Arr=( [AAP]=$AA_P [AAS]=$AA_S )
for key in ${Arr[@]}; do
if [[ $key == $nScript ]]; then
key="${Arr[$key]}"
fi
while [ $runs -gt 0 ]; do
echo $key
(( runs=runs-1 ))
done
done
exit
입력이 "S"와 "3"일 때 출력은 다음과 같습니다.
AAS
/root/run_Scripts/AA_P_run.sh
/root/run_Scripts/AA_P_run.sh
/root/run_Scripts/AA_P_run.sh
스크립트가 '/root/run_Scripts/를 에코하지 않는 이유는 무엇입니까?AA_S_run.sh?
답변1
${assoc[@]}
다음으로 확장가치연관 배열의 경우(주위에 따옴표를 잊어버렸기 때문에 분할+글로브의 영향을 받음) 목록용열쇠, ksh93 에서와 같이 "${!assoc[@]}"
구문을 복사해야 합니다.bash
bash
또한 키를 찾을 때까지 키를 반복하는 이유는 무엇입니까? 그냥 해:
while ((runs--)); do
printf '%s\n' "${Arr[$nScript]}"
done
기타 참고사항:
$nScript
배열의 키에 있는지 확인하려면 다음을 수행할 수 있습니다. (if [[ -n $nScript && -n ${Arr[$nScript]+set} ]]; then...
연관 배열이 null 키를 차단한다는 사실을 설명하기 위해 null이 아닌지에 대한 추가 테스트$nScript
)bash
$nScript
스크립트에 설정되지 않은 것 같습니다($script
예).[[ $a == $b ]]
변수가 저장된 패턴$a
(즉, 구문의 소스)과 일치하는지 테스트합니다. 과 가 같은지 확인하려면 가 필요합니다.$b
bash
ksh
[[...]]
$a
$b
[[ $a == "$b" ]]
1 zsh의 구문을 복사한 경우에 해당됩니다 "${(k@)assoc}"
.