当我使用带有不同外部监视器设置的笔记本电脑时,我曾尝试过使用一个设置显示分辨率的脚本。我想也是为了学习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:
for monitor in "${monitors[@]}"
将迭代monitors
数组的值。但是在脚本中,您没有定义和填充这个monitors
数组。您有一个名为known_monitor
的关联数组- 迭代数组的值时,不能按其值对该数组进行索引。您需要通过在数组名称前面加上感叹号
!
来迭代数组的索引或键。像这样: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