我有这样的剧本:
#!/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我使用关联数组,因为我只需要编写一次选项,添加选项非常容易(只需追加列表)。
发布于 2019-06-08 17:37:18
使用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参数周围的引号允许您使用包含空格字符的键。
https://unix.stackexchange.com/questions/493310
复制相似问题