我喜欢将其转换为大写,仅用于格式化的简单目的,因此它将遵循未来的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
答案 0 :(得分:11)
此版本不需要bash,但使用管道:
read -p "Enter in Location (i.e. SDD-134) " answer
answer=$(echo "$answer" | tr '[:lower:]' '[:upper:]')
echo "$answer"
如果你正在使用bash并且不关心可移植性,你可以用这个代替第二行:
answer="${answer^^}"
查看bash手册页的“参数扩展”部分了解详情。
答案 1 :(得分:3)
通过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
答案 2 :(得分:3)
在bash
版本4或更高版本中:
answer=${answer^^*}
答案 3 :(得分: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 :(得分:-4)
大写变量的好方法是
$var=`echo $var|tr '[:lower:]' '[:upper:]'`
注意Bene a back quotes