我有这个脚本:
#!/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
但是当我运行这个时,mirror
和extend
是同一个项目。
有没有办法将其分成两个单独的项目?
要打印多个项目,请执行以下操作:
echo -e "first\nsecond\nthird" | dmenu
我使用了关联数组,因为这样我只需要编写一次选项,并且添加选项非常容易(只需附加列表)。
答案1
使用printf
而不是echo
格式化由换行符分隔的输入:
#!/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
允许您使用包含空格字符的键。