gpt4 book ai didi

bash - 在ubuntu上的sh中将读取变量转换为小写

转载 作者:太空狗 更新时间:2023-10-29 11:04:49 25 4
gpt4 key购买 nike

我有以下情况:

#!/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:]'

它确实对 bashsh 都有效,但没有 echo 就不起作用。
它还打印两次读取输入,而不是像这样打印一次:

y

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

最佳答案

这可能是因为您还没有将翻译后的输出分配给变量。此外,我建议在双引号周围引用您的变量,以防止单词拆分和路径名扩展。

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

总的来说,要使您的代码在 bashsh 中都能正常工作,您应该已经删除特定于 bash 的部分:

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

如果只是显示较小的表格,您可以跳过作业。但是不要与它一起使用另一个 echo :

#!/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

关于bash - 在ubuntu上的sh中将读取变量转换为小写,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18801698/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com