чтение
может разбить ввод на слова и сохранить результат в массиве.Задайте для переменной IFS
символ-разделитель слов (он должен быть одним символом, а не строкой - если значение IFS
содержит несколько символов, то каждый символ является разделителем слов. ).
IFS=, read -a platforms
Затем сравните каждый элемент массива с набором поддерживаемых платформ.
for p in "${platforms[@]}"; do
case "$p" in
win|mac|linux32|linux64) :;;
all) platforms=(win mac linux32 linux64);;
*) printf 1>&2 "Unsupported platform: %s\n" "$p"; return 2;;
esac
done
Вы также можете сравнить набор платформ за один раз. Это более удобно, если вы не хотите жестко указывать набор поддерживаемых платформ в проверочном коде¹.
supported_platforms=(win mac linux32 linux64)
IFS=, read -a platforms
bad_platform_names=($(comm -23 <(printf '%s\n' all "${platforms[@]}" | sort -u) \
<(printf '%s\n' "${supported_platforms[@]}" | sort -u)))
if [[ ${#bad_platform_names[@]} -ne 0 ]]; then
printf "Unsupported platform: %s\n" "${bad_platform_names[@]}"
exit 1
fi
if printf '%s\n' "${platforms[@]}" | grep -qx all; then
platforms=("${supported_platforms[@]}")
fi
Другой подход заключается в том, чтобы запрашивать платформы по одной с помощью встроенной функции select
.
¹ Конечно, вы можете сделать это в чистом bash, если хотите.
Если вы использовали Решение 2 ,
в соответствии с xmodmap
документацией:
The first keysym is used when no modifier key is pressed in conjunction with this key, the second with Shift, the third when the Mode_switch key is used with this key and the fourth when both the Mode_switch and Shift keys are used.
добавить четвертыйkeysym
:
код клавиши 66 = режим _переключатель
keysym h = h H Влево Влево
keysym l = l L Вправо Вправо
keysym k = k K Вверх Вверх
keysym j = j J Вниз Вниз
keysym u = u U Предыдущий Предыдущий
keysym i = i I Home Home
keysym o = o O Конец Конец
keysym p = p P Далее Далее