该脚本将根据用户输入回显存储在数组中的不同值。但是,输出不正确,并回显了错误的值。
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?
${assoc[@]}
扩展为关联数组的值(受 split+glob 影响,因为您忘记了它周围的引号)。对于键列表,您需要"${!assoc[@]}"
在bash
ksh93 中复制其语法bash
¹。另外,为什么要遍历键直到找到那个键?做就是了:
其他注意事项:
$nScript
是否在数组的键中,您可以执行以下操作:(非空if [[ -n $nScript && -n ${Arr[$nScript]+set} ]]; then...
的附加测试以解决关联数组在空键上阻塞的事实)。$nScript
bash
$nScript
似乎没有在您的脚本中设置($script
是)[[ $a == $b ]]
测试$a
变量是否与存储在$b
中的模式匹配bash
(例如ksh
该[[...]]
构造的来源)。如果要检查$a
和$b
是否相同,则需要[[ $a == "$b" ]]
.¹如果它复制了 zsh 的语法,那将是
"${(k@)assoc}"
。