このスクリプトがあります。
#!/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
なプロジェクトになります。
これを2つの別々のプロジェクトに分割する方法はありますか?
複数の項目を印刷するには:
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
文字を含むキーを使用できます。