当我在笔记本电脑上使用不同的外部显示器设置时,我曾尝试使用一个脚本来设置我的显示分辨率。我想也是为了学习bash。
现在,我有了一个关联数组,所有监视器都配置为key,预期分辨率为value。
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
------------------我试过移动单行句和添加引号,但似乎都不起作用。
任何建议都将是有帮助的,提前谢谢!
发布于 2020-12-27 04:20:27
更正了脚本中的一些错误,它就可以工作了:
#!/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 ------------------
doneknown_monitor关联数组的替代声明:
declare -A known_monitor=(
[Virtual1]=1920x1200
[Virtual2]=1400x1050
[eDP-1]=2560x1440
)你的初始脚本出了什么问题:
带有大写K的shell引用不同的变量名,因为在shell中,变量名区分大小写。此数组未声明为将迭代monitors数组的值的关联array.
for monitor in "${monitors[@]}"。但是在脚本中,您并没有定义和填充这个monitors数组。你有一个名为known_monitor.!来迭代数组的索引或键。像这样:for monitor in "${!monitors[@]}"发布于 2020-12-27 04:07:53
你的上一个known_monitor使用了大写密钥,它不应该是:
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 ------------------
donehttps://stackoverflow.com/questions/65460133
复制相似问题