首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >关联数组的管道回波进入dmenu

关联数组的管道回波进入dmenu
EN

Unix & Linux用户
提问于 2019-01-08 19:14:40
回答 1查看 1.1K关注 0票数 2

我有这样的剧本:

代码语言:javascript
复制
#!/bin/bash

declare -a arr
arr+=(
[mirror]="xrandr --output hdmi-1 --same-as edp-1"
[extend]="xrandr --output hdmi-1 --auto"
)
screen=hdmi-1

chosen=$(echo -e ${!arr[@]}| dmenu -fn monospace-14)

[ "$chosen" != "" ] || exit

但是当我运行这个程序时,mirrorextend是相同的项目。

有办法把这个分成两个单独的项目吗?

若要打印多个项,请执行以下操作:

代码语言:javascript
复制
echo -e "first\nsecond\nthird" | dmenu

我使用关联数组,因为我只需要编写一次选项,添加选项非常容易(只需追加列表)。

EN

回答 1

Unix & Linux用户

回答已采纳

发布于 2019-06-08 17:37:18

使用printf而不是echo格式化以换行符分隔的输入:

代码语言:javascript
复制
#!/bin/bash

declare -A arr
arr+=(
[mirror]="xrandr --output hdmi-1 --same-as edp-1"
[extend]="xrandr --output hdmi-1 --auto"
)

choice=$(printf "%s\n" "${!arr[@]}" | dmenu -fn monospace-14)

# Execute choice if dmenu returns ok:
[ $? = 0 ] && ${arr[$choice]}

请注意,declare -a只用于索引数组,而declare -A用于关联数组。printf参数周围的引号允许您使用包含空格字符的键。

票数 3
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/493310

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档