将 arg 转换为大写以作为变量传递

Inn*_*rit 5 shell bash csh

有没有办法将命令行参数转换为大写并将其作为正在调用的脚本中的变量传递?

Eg. ./deploy_app.csh 1.2.3.4 middleware 
Run Code Online (Sandbox Code Playgroud)

应该将中间件转换为 MIDDLEWARE 并将其作为脚本内部的变量传递,它需要变量替换。

我知道我可以使用 echo 和 awk 来获取此输出,但尝试检查是否有不使用该组合的方法

Jef*_*ler 13

在脚本中使用 bash (4.0+):

newvarname=${3^^}
Run Code Online (Sandbox Code Playgroud)

使用 tcsh:

set newvarname = $3:u:q
Run Code Online (Sandbox Code Playgroud)

使用 zsh:

# tcsh-like syntax:
newvarname=${3:u} # or just $3:u
# native syntax:
newvarname=${(U)3}
Run Code Online (Sandbox Code Playgroud)

使用tr而不是 shell 功能(尽管仅限于单字节字母仅在trGNU 等某些实现中):

newvarname=$(printf "%s" "$3" | tr '[:lower:]' '[:upper:]')
Run Code Online (Sandbox Code Playgroud)

此页面总结了不同 UNIX shell 的许多功能,包括文本操作:http : //hyperpolyglot.org/unix-shells


小智 9

在 Bash 中,您可以使用 将变量声明为大写-u,然后它会自动转换。

$ declare -u a
$ b=abcd
$ a=$b
$ echo $a
ABCD
Run Code Online (Sandbox Code Playgroud)

  • 请注意,它来自 `ksh`(您将使用 `typeset` 而不是 `declare`)。另请注意,它还具有将变量的范围限制为当前函数的副作用(并且在退出函数时恢复变量的先前值)。 (2认同)