如何将命令行参数大写?

如何将命令行参数大写?

我搜索了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:]'失败,只有awkstoupper和 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^^}"

相关内容