Можете ли вы иметь различную среду Linux Desktop Environment для каждого пользователя на одном компьютере?

Нашел ответ на суперпользователе: https://superuser.com/questions/566082/less-doesnt-highlight-search

Похоже, это связано с настройкой TERM. Например, в обычном окне терминала gnome обычно действует меньшее выделение (белый фон), но когда я нахожусь в tmux, отображается курсив. Разница для меня в том, что TERM установлен на "screen", когда в tmux, но на "xterm-256color", когда нет. Когда я устанавливаю «TERM = xterm-256color» в окне tmux, выделение меньшим цветом возвращается к выделению фона.

0
27.09.2018, 06:03
2 ответа

Простой тест регулярного выражения, например

[[ " ${all[@]} " =~ " $site " ]] && echo in || echo out

может быть достаточно. Однако вы можете захотеть защититься от ложных срабатываний.

И, судя по тому, как вы оцениваете подтверждение, он закроет скрипт с кодом выхода ошибки, если вы введете y, Yили yesв любой комбинации верхнего и нижнего регистра.

0
28.01.2020, 02:31

(Я предполагаю, что вы изменили if [[ "${site}" == "${all[@]}" ]] на  if [[ "$site" == "$item" ]].)

Только представьте, как выполняется ваш цикл. Предположим, вы набираете b. Первая итерация цикла устанавливает itemравным a. Вы сравниваете bс  a. Если бы они были равны, вы бы сообщили о проверке. Но они не равны, поэтому вы сообщаете о неудаче и уходите.

Не лучше, если вы напечатаете a. На первой итерации цикла itemравно a, и вы сообщаете об успехе и продолжаете цикл . Затем itemстановится b, и вы переходите к пункту else, где вы сообщаете об отказе и выходе.

Проблема в том, что вы сообщаете об ошибке, если ввод отличается от любого из допустимых значений. Но любой ввод будет отличаться как минимум от двух допустимых значений. (недопустимые входные данные будут отличаться от всех трех ). Вам нужно сообщить об успехе, если ввод равен любому из допустимых значений, и провал в противном случае.

То, как именно вы это сделаете, зависит от общей картины. Если чтение ввода и его проверка — этовсе , что вы хотите сделать, вам нужно лишь небольшое изменение вашего текущего кода:

for item in "${all[@]}"; do
    echo "$item"
    if [[ "$site" == "$item" ]]; then
        echo "Site Name validated" && exit 0
    fi
done
echo "No Match For Site Name" && exit 1

Но если (как это вероятно )вы хотите, чтобы скрипт продолжался и делал что-то с допустимым вводом, хороший способ — использовать флаг:

valid=
for item in "${all[@]}"; do
    echo "$item"
    if [[ "$site" == "$item" ]]; then
        echo "Site Name validated" && valid=1
    fi
done
if ! [ "$valid" ]
then
    echo "No Match For Site Name" && exit 1
fi
# (script continues with valid input)
               ︙

П.С. Вам не нужно говорить "${site}"в этом контексте; "$site"в порядке.

2
28.01.2020, 02:31

Теги

Похожие вопросы