系统相关
首页 > 系统相关> > linux-将读取的变量转换为小写

linux-将读取的变量转换为小写

作者:互联网

我有以下情况:

#!/bin/bash

echo "Please enter a word:"
read foobar

在Ubuntu终端中使用sh script.sh调用该脚本.
在互联网上搜索我发现的解决方案:

foobar=${foobar,,}
echo $foobar

以上方法仅适用于bash script.sh
所以我继续研究发现:

echo $foobar | tr '[:upper:]' '[:lower:]'

确实对bash和sh都有效,但是没有回声就不起作用.
它还将读取的输入打印两次,而不是这样打印两次:
ÿ
ÿ

那么,如何在不打印两次读取输入的情况下对sh执行此操作?

解决方法:

可能是因为您尚未将转换后的输出分配给变量.另外,我建议用双引号引起来的变量,以防止单词分裂和路径名扩展.

foobar=$(echo "$foobar" | tr '[:upper:]' '[:lower:]')

如果您使用的是大小写,而您只需要检查输入是y还是Y,则可以使用这样的全局模式.无需将其音译为小写形式.

case $foobar in
[yY])
    echo "User said yes."
    ;;
*)
    echo "User said no."
    ;;
esac

另外,您还可以使用-s抑制显示用户输入:

read -s foobar

总体而言,为了使您的代码在bash和sh中都能正常工作,您应该已经删除了bash特定的部分:

#!/bin/bash
echo "Please enter a word:"
read -s foobar
foobar=$(echo "$foobar" | tr '[:upper:]' '[:lower:]')
echo "$foobar"

如果只是显示较小的表格,则可以跳过分配.但是,请勿同时使用其他回声:

#!/bin/bash
echo "Please enter a word:"
read -s foobar
echo "$foobar" | tr '[:upper:]' '[:lower:]'

案例的另一种替代形式.这是为了与POSIX兼容.

if [ "$foobar" = y ] || [ "$foobar" = Y ]; then
    echo "User said yes."
else
    echo "User said no."
fi

在bash中可能就是这样.即使在不支持${parameter ,,}功能的早期版本中,它也可以使用.

if [[ $foobar == [yY] ]]; then
    echo "User said yes."
else
    echo "User said no."
fi

标签:bash,shell,sh,ubuntu-12-04,linux
来源: https://codeday.me/bug/20191030/1967765.html