Как я изменяю случай (верхний регистр и нижний регистр) строк в моей переменной?

[117846] Я смог скопировать каталог с Live DVD, и теперь я могу работать на своем компьютере.[12212] Причина, по которой я не мог сделать это раньше, была в моем CD ROM. Видимо, он был поврежден, и в этом вся "паника в ядре".[12213]Я решил сделать это вместо переустановки всей операционной системы, потому что на самом деле у меня не было установлено много программ больше, чем указано по умолчанию в этом дистрибутиве Linux.[12214]Как предложил @Gilles, сейчас я делаю резервные копии, чтобы предотвратить будущие инциденты. И как он сказал, если возникнет какая-то странная проблема, я знаю, в чем она виновата. Но все же, я хотел бы попробовать решить их перед форматированием.[12215]Я пока не уверен, почему я не смог переустановить пакеты, которые нашел в [118374]/var/backups/dpkg.status.0[118375], так что если кто-то знает почему, было бы здорово, если бы вы могли рассказать нам.[12216]Спасибо всем, кто помог.[117857]
1
26.07.2018, 13:47
4 ответа

Существует несколько полезных способов достижения этого (в Bash :

Две проверки

echo -n "Enter test: "
read test

if [[ $test == "a" || $test == "A" ]]; then
    echo "worked"
else
    echo "failed"
fi

сделать Входные строчные буквы

echo -n "Enter test: "
read test
test="${test,,}"

if [[ $test == "a" ]]; then
    echo "worked"
else
    echo "failed"
fi

Regex для обоих случаев

echo -n "Enter test: "
read test

if [[ $test =~ ^[aA]$ ]]; then
    echo "worked"
else
    echo "failed"
fi

Сделать оболочку игнорировать корпус

echo -n "Enter test: "
read test

shopt -s nocasematch
if [[ $test == a ]]; then
    echo "worked"
else
    echo "failed"
fi
5
27.01.2020, 23:10
sed -ne '/^[aA]$/!i\' -e failed -e 's//worked/p;q' </dev/tty
1
27.01.2020, 23:10

Просто используйте стандарт SH (POSIX и BOURNE) Синтаксис:

case $answer in
  a|A) echo OK;;
  *)   echo >&2 KO;;
esac

или:

case $answer in
  [aA]) echo OK;;
  *)    echo >&2 KO;;
esac

с , , ksh или ZSH (3 раковины, которые поддерживают этот нестандартный [[[...]] [[[...]] синтаксис), вы можете объявить в нижнем регистре :

typeset -l test
printf 'Enter test: '
read test
if [ "$test" = a ]; then...

(остерегайтесь, что Bash Шкаф преобразования является поддельным в некоторых локалях).

7
27.01.2020, 23:10

Есть несколько способов сделать это. Если вы используете недавнюю версию Bash, это довольно легко: вы можете преобразовать корпус теста , или вы можете использовать Regex, чтобы соответствовать как верхним и нижним регистру.

Сначала дорого регеляции:

read -p "enter test: " test;[[ $test =~ ^[Aa]$ ]] && echo yes || echo no

Теперь в случае смещения дела:

read -p "enter test: " test;[[ ${test^^} = A ]] && echo yes || echo no
2
27.01.2020, 23:10

Теги

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