3

出于简单的格式化目的,我想将其转换为大写,这样它将遵守未来的案例陈述。正如我认为 case 语句是区分大小写的。

我到处都看到 tr 命令与 echo 命令一起使用,可以立即为您提供结果,例如:

echo "Enter in Location (i.e. SDD-134)"
read answer (user enters "cfg"

echo $answer | tr '[:lower:]' '[:upper:]'   which produced

cfg # first echo not upper?

echo $answer #echo it again and it is now upper...

CFG
4

5 回答 5

16

此版本不需要 bash,但使用管道:

read -p "Enter in Location (i.e. SDD-134) " answer
answer=$(echo "$answer" | tr '[:lower:]' '[:upper:]')
echo "$answer"

如果您使用 bash 并且不关心可移植性,则可以将第二行替换为:

answer="${answer^^}"

查看 bash 手册页的“参数扩展”部分了解详细信息。

于 2012-06-22T15:19:35.873 回答
5

通过 tr 回显一个变量将输出值,它不会改变变量的值:

answer='cfg'
echo $answer | tr '[:lower:]' '[:upper:]'
# outputs uppercase but $answer is still lowercase

如果您想稍后引用它,则需要重新分配该变量:

answer='cfg'
answer=$(echo $answer | tr '[:lower:]' '[:upper:]')
echo $answer
# $answer is now uppercase
于 2012-06-22T15:17:45.970 回答
4

bash版本 4 或更高版本中:

answer=${answer^^*}
于 2012-06-22T16:53:47.650 回答
0

目前尚不清楚您在问什么,但如果您尝试将用户输入转换为大写,只需执行以下操作:

sed 1q | tr '[:lower:]' '[:upper:]' | read answer

在不在子shell 中运行读取的shell(例如zsh)中,这将直接工作。要在 bash 中执行此操作,您需要执行以下操作:

printf "Enter in Location (i.e. SDD-134): "
sed 1q | tr '[:lower:]' '[:upper:]' | { read answer; echo $answer; }

子外壳关闭后,answer是一个未设置的变量。

于 2012-06-22T15:19:09.510 回答
-4

大写变量的好方法是

$var=`echo $var|tr '[:lower:]' '[:upper:]'`

注意 Bene a 反引号

于 2012-06-22T16:38:31.227 回答