BASH tr 命令

问题描述 投票:0回答:5

出于格式化的简单目的,我想将其转换为大写,以便它符合未来的 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
linux bash scripting case tr
5个回答
21
投票

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

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

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

answer="${answer^^}"

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


6
投票

通过 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

4
投票

bash
版本 4 或更高版本中:

answer=${answer^^*}

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; }

子shell关闭后,

answer
是未设置的变量。


-4
投票

大写变量的好方法是

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

注意 Bene a back quotes

© www.soinside.com 2019 - 2024. All rights reserved.