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