这可能是因为您尚未将翻译后的输出分配给变量。另外我建议在双引号周围引用你的变量,以防止分词和路径名扩展。
foobar=$(echo "$foobar" | tr '[:upper:]' '[:lower:]')
如果您正在使用case
并且您只需要检查输入是否是y
或Y
任何一种方式,您都可以使用这样的 glob 模式。无需将其音译为小写形式。
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:]'
的另一种替代形式case
。这意味着与 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