이 스크립트가 있습니다.
#!/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
공백 문자가 포함된 키를 사용할 수 있습니다.