Linux BASH tr命令

Linux BASH tr命令,linux,bash,scripting,case,tr,Linux,Bash,Scripting,Case,Tr,为了便于格式化,我想将其转换为大写,这样它将遵循将来的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

为了便于格式化,我想将其转换为大写,这样它将遵循将来的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

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

不清楚您在问什么,但如果您试图将用户输入转换为大写,请执行以下操作:

sed 1q | tr '[:lower:]' '[:upper:]' | read answer
在不在子shell(例如zsh)中运行read的shell中,这将直接起作用。要在bash中执行此操作,您需要执行以下操作:

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

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

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

read -p "Enter in Location (i.e. SDD-134) " answer
answer=$(echo "$answer" | tr '[:lower:]' '[:upper:]')
echo "$answer"
如果您使用的是bash,并且不关心可移植性,那么可以用以下内容替换第二行:

answer="${answer^^}"

有关详细信息,请查看bash手册页的“参数扩展”部分。

使用大写变量的好方法是

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

请注意,在
bash
第4版或更高版本中有一个反引号:

answer=${answer^^*}

我看不出这段代码是如何更改$answer的-您没有将
tr
的输出分配回$answer,因此$answer应该保持
cfg
。第一个echo对我来说是较高的。第二,你有问题吗?我知道我做错了什么,我现在也明白上面和下面给出的答案。我错误地在脚本的后面有一行测试代码。谢谢你的帮助,你被否决了,因为你问题的第一句话一点也不清楚。您希望做什么,问题是什么?因此:answer$(echo Correct,它没有得到输出。它被捕获并分配回变量。这不是有效的赋值语法;您应该省略
bash
中的第一个
$
,您可以说
read answer<