如何更改变量中字符串的大小写(大写和小写)?

如何更改变量中字符串的大小写(大写和小写)?
"Enter test: "
read test

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

这是我正在做的测试的简单说明,但如果我输入“A”,它将失败。在变量阶段我可以做些什么来将其全部更改为小写,以便测试匹配吗?

答案1

只需使用标准sh(POSIX 和 Bourne)语法:

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

或者:

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

使用bash,kshzsh(支持该非标准[[...]]语法的 3 个 shell),您可以声明一个小写多变的:

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

(请注意,bash在某些语言环境中,大小写转换是假的)。

答案2

有几种有用的方法可以实现这一目标(参见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

两种情况的正则表达式

echo -n "Enter test: "
read test

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

让 shell 忽略大小写

echo -n "Enter test: "
read test

shopt -s nocasematch
if [[ $test == a ]]; then
    echo "worked"
else
    echo "failed"
fi

答案3

做这件事有很多种方法。如果您使用的是最新版本的 bash,则非常简单:您可以转换 的大小写test,或者可以使用正则表达式来匹配大写和小写 a。

首先是正则表达式方式:

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

现在是大小写转换:

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

答案4

sed -ne '/^[aA]$/!i\' -e failed -e 's//worked/p;q' </dev/tty

相关内容