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