O script ecoará os diferentes valores armazenados em uma matriz com base na entrada do usuário. No entanto, a saída não está correta e o valor errado é repetido.
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
Quando a entrada é 'S' e '3', a saída é a seguinte.
AAS
/root/run_Scripts/AA_P_run.sh
/root/run_Scripts/AA_P_run.sh
/root/run_Scripts/AA_P_run.sh
Por que o script não está ecoando ' /root/run_Scripts/AA_S_run.sh ?
${assoc[@]}
expande para os valores do array associativo (sujeito a split+glob, pois você esqueceu as aspas ao redor). Para a lista de chaves , você precisa como"${!assoc[@]}"
embash
ksh93 cuja sintaxebash
foi copiada¹.Além disso, por que passar pelas teclas até encontrar uma? Apenas faça:
Outras notas:
$nScript
está entre as chaves do array, você pode fazer:if [[ -n $nScript && -n ${Arr[$nScript]+set} ]]; then...
(o teste adicional para$nScript
não estar vazio para contornar o fato de quebash
os arrays associativos engasgam com as chaves vazias).$nScript
não parece estar definido em seu script ($script
é)[[ $a == $b ]]
testa se a$a
variável corresponde ao padrão armazenado em$b
(bash
como deksh
onde essa[[...]]
construção vem). Se você quisesse verificar se$a
e$b
são idênticos, precisaria de[[ $a == "$b" ]]
.¹ se tivesse copiado a sintaxe do zsh, isso teria acontecido
"${(k@)assoc}"
.