我搜索了SO,发现将后面的字符串大写可以工作
str="Some string"
echo ${str^^}
但我尝试在命令行参数上做类似的事情,这给了我以下错误
尝试过
#!/bin/bash
## Output
echo ${1^^} ## line 3: ${1^^}: bad substitution
echo {$1^^} ## No error, but output was still smaller case i.e. no effect
我们怎样才能做到这一点?
答案1
您正在尝试的语法str^^
可从 Bash 4.0 及更高版本获得。也许您的版本是旧版本(或者您明确运行了脚本sh
):
尝试这个:
str="Some string"
printf '%s\n' "$str" | awk '{ print toupper($0) }'
答案2
echo "lowercase" | tr a-z A-Z
输出:
LOWERCASE
答案3
小心tr
除非A-Z
是你所使用的全部。对于其他语言环境甚至'[:lower:]' '[:upper:]'
失败,只有awk
stoupper
和 bash (v4+) 有效:
$ str="abcåäö"
$ echo "$str" | tr '/a-z/' '/A-Z/'
ABCåäö
$ echo "$str" | LC_ALL=sv_SE tr '[:lower:]' '[:upper:]'
ABCåäö
$ echo "$str" | awk '{print toupper($0)}'
ABCÅÄÖ
$ echo ${str^^} # Bash 4.0 and later
ABCÅÄÖ
$ STR="ABCÅÄÖ"
$ echo ${STR,,}
abcåäö
答案4
尝试引用字符串:
echo "${str^^}"