关联数组不输出



当我使用带有不同外部监视器设置的笔记本电脑时,我曾尝试过使用一个设置显示分辨率的脚本。我想也是为了学习bash。

现在,我有了一个关联数组,所有监视器都配置为键,期望的分辨率作为值。

declare -A known_monitor
known_monitor[Virtual1]=1920x1200
known_monitor[Virtual2]=1400x1050
Known_monitor[eDP-1]=2560x1440

当我尝试访问这样的监视器时:

for monitor in "${monitors[@]}"
do
echo ------------------
echo $monitor
echo ${known_monitor[$monitor]}
echo ------------------
done

我看到$monitor值,但是";known_monitor";是空的。

------------------
eDP-1
------------------

我试过移动超自然现象并添加引文标记,但似乎什么都不起作用。

任何建议都会有帮助,提前谢谢!

更正了脚本中的一些错误,它可以工作:

#!/usr/bin/env bash
declare -A known_monitor
known_monitor[Virtual1]=1920x1200
known_monitor[Virtual2]=1400x1050
known_monitor[eDP-1]=2560x1440
for monitor in "${!known_monitor[@]}"
do
echo ------------------
echo "$monitor"
echo "${known_monitor[$monitor]}"
echo ------------------
done

known_monitor关联数组的备用声明:

declare -A known_monitor=(
[Virtual1]=1920x1200
[Virtual2]=1400x1050
[eDP-1]=2560x1440
)

你最初的脚本出了什么问题:

  • 问题1:
    Known_monitor[eDP-1]=2560x1440(大写(K表示不同的变量名,因为在shell中,变量名区分大小写。此数组尚未声明为关联数组
  • 问题2:
    1. for monitor in "${monitors[@]}"将迭代monitors数组的值。但是在脚本中,您没有定义和填充这个monitors数组。您有一个名为known_monitor的关联数组
    2. 迭代数组的值时,不能按其值对该数组进行索引。您需要通过在数组名称前面加上感叹号!来迭代数组的索引或键。像这样:for monitor in "${!monitors[@]}"

您的最后一个已知监视器使用大写密钥,它不应该:

declare -A known_monitor
known_monitor[Virtual1]=1920x1200
known_monitor[Virtual2]=1400x1050
known_monitor[eDP-1]=2560x1440
monitors=(Virtual1 Virtual2 eDP-1)
for monitor in "${monitors[@]}"
do
echo ------------------
echo $monitor
echo ${known_monitor[$monitor]}
echo ------------------
done

相关内容

  • 没有找到相关文章

最新更新