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